Bazaar developer reference

CvPlayer::initFreeUnits(CvGameInitialItemsOverrides &)

Defined in
CvPlayer.cpp, line 1555
Class
CvPlayer
Hook name
CivHooks::CvPlayer_initFreeUnits

Hooks

static bool BeforeCvPlayer_initFreeUnits(CvPlayer* self, CvGameInitialItemsOverrides& arg0);static void AfterCvPlayer_initFreeUnits(CvPlayer* self, CvGameInitialItemsOverrides& arg0);static void ReplaceCvPlayer_initFreeUnits(void (*original)(CvPlayer*, CvGameInitialItemsOverrides&), CvPlayer* self, CvGameInitialItemsOverrides& arg0);CivRegisterBefore<CivHooks::CvPlayer_initFreeUnits>(host, &BeforeCvPlayer_initFreeUnits);CivRegisterAfter<CivHooks::CvPlayer_initFreeUnits>(host, &AfterCvPlayer_initFreeUnits);CivRegisterReplace<CivHooks::CvPlayer_initFreeUnits>(host, &ReplaceCvPlayer_initFreeUnits);

Code

1555void CvPlayer::initFreeUnits(CvGameInitialItemsOverrides& /*kOverrides*/)1556{1557	UnitTypes eLoopUnit;1558	int iFreeCount;1559	int iDefaultAI;1560	int iI, iJ;15611562	CvEraInfo& gameStartEra = GC.getGame().getStartEraInfo();1563	CvHandicapInfo& gameHandicap = GC.getGame().getHandicapInfo();1564	CvHandicapInfo& playerHandicap = getHandicapInfo();1565	CvCivilizationInfo& playerCivilization = getCivilizationInfo();15661567	for(iI = 0; iI < GC.getNumUnitClassInfos(); iI++)1568	{1569		const UnitClassTypes eUnitClass = static_cast<UnitClassTypes>(iI);1570		CvUnitClassInfo* pkUnitClassInfo = GC.getUnitClassInfo(eUnitClass);1571		if(pkUnitClassInfo)1572		{1573			eLoopUnit = (UnitTypes)playerCivilization.getCivilizationUnits(iI);15741575			if(eLoopUnit != NO_UNIT)1576			{1577				iFreeCount = playerCivilization.getCivilizationFreeUnitsClass(iI);1578				iDefaultAI = playerCivilization.getCivilizationFreeUnitsDefaultUnitAI(iI);15791580				iFreeCount *= (gameStartEra.getStartingUnitMultiplier() + ((!isHuman()) ? gameHandicap.getAIStartingUnitMultiplier() : 0));15811582				// City states only get 1 of something1583				if(isMinorCiv() && iFreeCount > 1)1584					iFreeCount = 1;15851586				for(iJ = 0; iJ < iFreeCount; iJ++)1587				{1588					addFreeUnit(eLoopUnit,(UnitAITypes)iDefaultAI);1589				}1590			}1591		}1592	}15931594	// Trait units1595	int iUnitClass = GetPlayerTraits()->GetFirstFreeUnit(NO_TECH);1596	while(iUnitClass != NO_UNITCLASS)1597	{1598		eLoopUnit = (UnitTypes)playerCivilization.getCivilizationUnits(iUnitClass);1599		iDefaultAI = GC.GetGameUnits()->GetEntry(eLoopUnit)->GetDefaultUnitAIType();1600		addFreeUnit(eLoopUnit,(UnitAITypes)iDefaultAI);16011602		// Another?1603		iUnitClass = GetPlayerTraits()->GetNextFreeUnit();1604	}16051606	// Defensive units1607	iFreeCount = gameStartEra.getStartingDefenseUnits();1608	iFreeCount += playerHandicap.getStartingDefenseUnits();16091610	if(!isHuman())1611		iFreeCount += gameHandicap.getAIStartingDefenseUnits();16121613	if(iFreeCount > 0 && !isMinorCiv())1614		addFreeUnitAI(UNITAI_DEFENSE, iFreeCount);16151616	// Worker units1617	iFreeCount = gameStartEra.getStartingWorkerUnits();1618	iFreeCount += playerHandicap.getStartingWorkerUnits();16191620	if(!isHuman())1621		iFreeCount += gameHandicap.getAIStartingWorkerUnits();16221623	if(iFreeCount > 0 && !isMinorCiv())1624		addFreeUnitAI(UNITAI_WORKER, iFreeCount);16251626	// Explore units1627	iFreeCount = gameStartEra.getStartingExploreUnits();1628	iFreeCount += playerHandicap.getStartingExploreUnits();16291630	if(!isHuman())1631		iFreeCount += gameHandicap.getAIStartingExploreUnits();16321633	if(iFreeCount > 0 && !isMinorCiv())1634		addFreeUnitAI(UNITAI_EXPLORE, iFreeCount);16351636	// If we only have one military unit and it's on defense then change its AI to explore1637	if(GetNumUnitsWithUnitAI(UNITAI_EXPLORE) == 0)1638	{1639		int iLoop;1640		CvUnit* pLoopUnit;1641		for(pLoopUnit = firstUnit(&iLoop); pLoopUnit != NULL; pLoopUnit = nextUnit(&iLoop))1642		{1643			if(pLoopUnit->AI_getUnitAIType() == UNITAI_DEFENSE)1644			{1645				pLoopUnit->AI_setUnitAIType(UNITAI_EXPLORE);1646				break;1647			}1648		}1649	}1650}

Calls

Called by