Bazaar developer reference

CvGame::init(HandicapTypes)

Defined in
CvGame.cpp, line 170
Class
CvGame
Hook name
CivHooks::CvGame_init
Changed in
0.5.0

Hooks

static bool BeforeCvGame_init(CvGame* self, HandicapTypes eHandicap);static void AfterCvGame_init(CvGame* self, HandicapTypes eHandicap);static void ReplaceCvGame_init(void (*original)(CvGame*, HandicapTypes), CvGame* self, HandicapTypes eHandicap);CivRegisterBefore<CivHooks::CvGame_init>(host, &BeforeCvGame_init);CivRegisterAfter<CivHooks::CvGame_init>(host, &AfterCvGame_init);CivRegisterReplace<CivHooks::CvGame_init>(host, &ReplaceCvGame_init);

Code

170void CvGame::init(HandicapTypes eHandicap)171{172	bool bValid;173	int iStartTurn;174	int iEstimateEndTurn;175	int iI;176177	//--------------------------------178	// Init saved data179	reset(eHandicap);180181	//--------------------------------182	// Init containers183	m_voteSelections.Init();184	m_votesTriggered.Init();185186	if(!isGameMultiPlayer())187	{188		m_jonRand.setCallStackDebuggingEnabled(false);189	}190191	m_mapRand.init(CvPreGame::mapRandomSeed() % 73637381);192	m_jonRand.init(CvPreGame::syncRandomSeed() % 52319761);193194	//--------------------------------195	// Verify pregame data196197	//Validate game era. If we lack the era info for the current era, work backwards until we find a valid one.198	if(!GC.getEraInfo(getStartEra())){199		for(int eraIdx = ((int)CvPreGame::era())-1; eraIdx >= 0; --eraIdx){200			CvEraInfo* curEraInfo = GC.getEraInfo((EraTypes)eraIdx);201			if(curEraInfo){202				CvPreGame::setEra((EraTypes)eraIdx);203				break;204			}205		}206	}207208	//--------------------------------209	// Init non-saved data210211	//--------------------------------212	// Init other game data213214	// Turn off all MP options if it's a single player game215	GameTypes g = CvPreGame::gameType();216	if(g == GAME_SINGLE_PLAYER)217	{218		for(iI = 0; iI < NUM_MPOPTION_TYPES; ++iI)219		{220			setMPOption((MultiplayerOptionTypes)iI, false);221		}222223		setOption(GAMEOPTION_SIMULTANEOUS_TURNS, false);224		setOption(GAMEOPTION_DYNAMIC_TURNS, false);225		setOption(GAMEOPTION_PITBOSS, false);226	}227228	// If this is a hot seat game, simultaneous turns is always off229	if(isHotSeat() || isPbem())230	{231		setOption(GAMEOPTION_SIMULTANEOUS_TURNS, false);232		setOption(GAMEOPTION_DYNAMIC_TURNS, false);233		setOption(GAMEOPTION_PITBOSS, false);234	}235236	if(isMPOption(MPOPTION_SHUFFLE_TEAMS))237	{238		int aiTeams[MAX_CIV_PLAYERS];239240		int iNumPlayers = 0;241		for(int i = 0; i < MAX_CIV_PLAYERS; i++)242		{243			if(CvPreGame::slotStatus((PlayerTypes)i) == SS_TAKEN)244			{245				aiTeams[iNumPlayers] = CvPreGame::teamType((PlayerTypes)i);246				++iNumPlayers;247			}248		}249250		for(int i = 0; i < iNumPlayers; i++)251		{252#if defined(MOD_BUGFIX_RANDOM)253			int j = (getJonRandNum(iNumPlayers - i, NULL) + i);254#else255			int j = (getJonRand().get(iNumPlayers - i, NULL) + i);256#endif257258			if(i != j)259			{260				int iTemp = aiTeams[i];261				aiTeams[i] = aiTeams[j];262				aiTeams[j] = iTemp;263			}264		}265266		iNumPlayers = 0;267		for(int i = 0; i < MAX_CIV_PLAYERS; i++)268		{269			if(CvPreGame::slotStatus((PlayerTypes)i) == SS_TAKEN)270			{271				CvPreGame::setTeamType((PlayerTypes)i, (TeamTypes)aiTeams[iNumPlayers]);272				++iNumPlayers;273			}274		}275	}276277	if(isOption(GAMEOPTION_LOCK_MODS))278	{279		if(isGameMultiPlayer())280		{281			setOption(GAMEOPTION_LOCK_MODS, false);282		}283		else284		{285			static const int iPasswordSize = 8;286			char szRandomPassword[iPasswordSize];287			for(int i = 0; i < iPasswordSize-1; i++)288			{289				szRandomPassword[i] = getJonRandNum(128, "Random Keyword");290			}291			szRandomPassword[iPasswordSize-1] = 0;292293			CvString strRandomPassword = szRandomPassword;294			CvPreGame::setAdminPassword(strRandomPassword);295		}296	}297298	CvGameSpeedInfo& kGameSpeedInfo = getGameSpeedInfo();299	if(getGameTurn() == 0)300	{301		iStartTurn = 0;302303		for(iI = 0; iI < kGameSpeedInfo.getNumTurnIncrements(); iI++)304		{305			iStartTurn += kGameSpeedInfo.getGameTurnInfo(iI).iNumGameTurnsPerIncrement;306		}307308		CvEraInfo& kEraInfo = getStartEraInfo();309310		iStartTurn *= kEraInfo.getStartPercent();311		iStartTurn /= 100;312313		setGameTurn(iStartTurn);314315		if (kEraInfo.isNoReligion())316		{317			CvPreGame::SetGameOption(GAMEOPTION_NO_RELIGION, true);318		}319	}320321	setStartTurn(getGameTurn());322323	iEstimateEndTurn = 0;324325	for(iI = 0; iI < kGameSpeedInfo.getNumTurnIncrements(); iI++)326	{327		iEstimateEndTurn += kGameSpeedInfo.getGameTurnInfo(iI).iNumGameTurnsPerIncrement;328	}329330	setDefaultEstimateEndTurn(iEstimateEndTurn);331332	if(getMaxTurns() == 0)333	{334335		setEstimateEndTurn(iEstimateEndTurn);336337		if(getEstimateEndTurn() > getGameTurn())338		{339			bValid = false;340341			for(iI = 0; iI < GC.getNumVictoryInfos(); iI++)342			{343				VictoryTypes eVictory = static_cast<VictoryTypes>(iI);344				CvVictoryInfo* pkVictoryInfo = GC.getVictoryInfo(eVictory);345				if(pkVictoryInfo)346				{347					if(isVictoryValid(eVictory))348					{349						if(pkVictoryInfo->isEndScore())350						{351							bValid = true;352							break;353						}354					}355				}356357			}358359			if(bValid)360			{361				setMaxTurns(getEstimateEndTurn() - getGameTurn());362			}363		}364	}365	else366	{367		setEstimateEndTurn(getGameTurn() + getMaxTurns());368	}369370	setStartYear(GC.getSTART_YEAR());371372	for(iI = 0; iI < GC.getNumSpecialUnitInfos(); iI++)373	{374		SpecialUnitTypes eSpecialUnit = static_cast<SpecialUnitTypes>(iI);375		CvSpecialUnitInfo* pkSpecialUnitInfo = GC.getSpecialUnitInfo(eSpecialUnit);376		if(pkSpecialUnitInfo)377		{378			if(pkSpecialUnitInfo->isValid())379			{380				makeSpecialUnitValid(eSpecialUnit);381			}382		}383	}384385	if(isOption(GAMEOPTION_QUICK_COMBAT))386	{387		CvPreGame::setQuickCombat(true);388	}389390	m_bArchaeologyTriggered = false;391	CvGoodyHuts::Reset();392393	doUpdateCacheOnTurn();394#if defined(CIV_HOST_API)395	CivHostOnNewGame();396#endif397}

Calls

Called by