Bazaar developer reference

CvPlayerTraits::InitPlayerTraits()

Defined in
CvTraitClasses.cpp, line 1936
Class
CvPlayerTraits
Hook name
CivHooks::CvPlayerTraits_InitPlayerTraits

Hooks

static bool BeforeCvPlayerTraits_InitPlayerTraits(CvPlayerTraits* self);static void AfterCvPlayerTraits_InitPlayerTraits(CvPlayerTraits* self);static void ReplaceCvPlayerTraits_InitPlayerTraits(void (*original)(CvPlayerTraits*), CvPlayerTraits* self);CivRegisterBefore<CivHooks::CvPlayerTraits_InitPlayerTraits>(host, &BeforeCvPlayerTraits_InitPlayerTraits);CivRegisterAfter<CivHooks::CvPlayerTraits_InitPlayerTraits>(host, &AfterCvPlayerTraits_InitPlayerTraits);CivRegisterReplace<CivHooks::CvPlayerTraits_InitPlayerTraits>(host, &ReplaceCvPlayerTraits_InitPlayerTraits);

Code

1935/// Store off data on bonuses from traits1936void CvPlayerTraits::InitPlayerTraits()1937{1938	for(int iI = 0; iI < GC.getNumTraitInfos(); iI++)1939	{1940		if(HasTrait((TraitTypes)iI))1941		{1942			CvTraitEntry* trait = GC.getTraitInfo((TraitTypes)iI);1943			m_iGreatPeopleRateModifier += trait->GetGreatPeopleRateModifier();1944			m_iGreatScientistRateModifier += trait->GetGreatScientistRateModifier();1945			m_iGreatGeneralRateModifier += trait->GetGreatGeneralRateModifier();1946			m_iGreatGeneralExtraBonus += trait->GetGreatGeneralExtraBonus();1947			m_iGreatPersonGiftInfluence += trait->GetGreatPersonGiftInfluence();1948			m_iLevelExperienceModifier += trait->GetLevelExperienceModifier();1949			m_iMaxGlobalBuildingProductionModifier += trait->GetMaxGlobalBuildingProductionModifier();1950			m_iMaxTeamBuildingProductionModifier += trait->GetMaxTeamBuildingProductionModifier();1951			m_iMaxPlayerBuildingProductionModifier += trait->GetMaxPlayerBuildingProductionModifier();1952			m_iCityUnhappinessModifier += trait->GetCityUnhappinessModifier();1953			m_iPopulationUnhappinessModifier += trait->GetPopulationUnhappinessModifier();1954			m_iCityStateBonusModifier += trait->GetCityStateBonusModifier();1955			m_iCityStateFriendshipModifier += trait->GetCityStateFriendshipModifier();1956			m_iCityStateCombatModifier += trait->GetCityStateCombatModifier();1957			m_iLandBarbarianConversionPercent += trait->GetLandBarbarianConversionPercent();1958			m_iLandBarbarianConversionExtraUnits += trait->GetLandBarbarianConversionExtraUnits();1959			m_iSeaBarbarianConversionPercent += trait->GetSeaBarbarianConversionPercent();1960			m_iCapitalBuildingModifier += trait->GetCapitalBuildingModifier();1961			m_iPlotBuyCostModifier += trait->GetPlotBuyCostModifier();1962#if defined(MOD_TRAITS_CITY_WORKING)1963			m_iCityWorkingChange += trait->GetCityWorkingChange();1964#endif1965#if defined(MOD_TRAITS_CITY_AUTOMATON_WORKERS)1966			m_iCityAutomatonWorkersChange += trait->GetCityAutomatonWorkersChange();1967#endif1968			m_iPlotCultureCostModifier += trait->GetPlotCultureCostModifier();1969			m_iCultureFromKills += trait->GetCultureFromKills();1970			m_iFaithFromKills += trait->GetFaithFromKills();1971			m_iCityCultureBonus += trait->GetCityCultureBonus();1972			m_iCapitalThemingBonusModifier += trait->GetCapitalThemingBonusModifier();1973			m_iPolicyCostModifier += trait->GetPolicyCostModifier();1974			m_iCityConnectionTradeRouteChange += trait->GetCityConnectionTradeRouteChange();1975			m_iWonderProductionModifier += trait->GetWonderProductionModifier();1976			m_iPlunderModifier += trait->GetPlunderModifier();1977			m_iImprovementMaintenanceModifier += trait->GetImprovementMaintenanceModifier();1978			m_iGoldenAgeDurationModifier += trait->GetGoldenAgeDurationModifier();1979			m_iGoldenAgeMoveChange += trait->GetGoldenAgeMoveChange();1980			m_iGoldenAgeCombatModifier += trait->GetGoldenAgeCombatModifier();1981			m_iGoldenAgeTourismModifier += trait->GetGoldenAgeTourismModifier();1982			m_iGoldenAgeGreatArtistRateModifier += trait->GetGoldenAgeGreatArtistRateModifier();1983			m_iGoldenAgeGreatMusicianRateModifier += trait->GetGoldenAgeGreatMusicianRateModifier();1984			m_iGoldenAgeGreatWriterRateModifier += trait->GetGoldenAgeGreatWriterRateModifier();1985			m_iExtraEmbarkMoves += trait->GetExtraEmbarkMoves();1986			m_iNaturalWonderFirstFinderGold += trait->GetNaturalWonderFirstFinderGold();1987			m_iNaturalWonderSubsequentFinderGold += trait->GetNaturalWonderSubsequentFinderGold();1988			m_iNaturalWonderYieldModifier += trait->GetNaturalWonderYieldModifier();1989			m_iNaturalWonderHappinessModifier += trait->GetNaturalWonderHappinessModifier();1990			m_iNearbyImprovementCombatBonus += trait->GetNearbyImprovementCombatBonus();1991			m_iNearbyImprovementBonusRange += trait->GetNearbyImprovementBonusRange();1992			m_iCultureBuildingYieldChange += trait->GetCultureBuildingYieldChange();1993			m_iCombatBonusVsHigherTech += trait->GetCombatBonusVsHigherTech();1994			m_iCombatBonusVsLargerCiv += trait->GetCombatBonusVsLargerCiv();1995			m_iLandUnitMaintenanceModifier += trait->GetLandUnitMaintenanceModifier();1996			m_iNavalUnitMaintenanceModifier += trait->GetNavalUnitMaintenanceModifier();1997			m_iRazeSpeedModifier += trait->GetRazeSpeedModifier();1998			m_iDOFGreatPersonModifier += trait->GetDOFGreatPersonModifier();1999			m_iLuxuryHappinessRetention += trait->GetLuxuryHappinessRetention();2000#if defined(MOD_TRAITS_EXTRA_SUPPLY)2001			m_iExtraSupply += trait->GetExtraSupply();2002			m_iExtraSupplyPerCity += trait->GetExtraSupplyPerCity();2003			m_iExtraSupplyPerPopulation += trait->GetExtraSupplyPerPopulation();2004#endif2005			m_iExtraSpies += trait->GetExtraSpies();2006			m_iUnresearchedTechBonusFromKills += trait->GetUnresearchedTechBonusFromKills();2007			m_iExtraFoundedCityTerritoryClaimRange += trait->GetExtraFoundedCityTerritoryClaimRange();2008			m_iFreeSocialPoliciesPerEra += trait->GetFreeSocialPoliciesPerEra();2009			m_iNumTradeRoutesModifier += trait->GetNumTradeRoutesModifier();2010			m_iTradeRouteResourceModifier += trait->GetTradeRouteResourceModifier();2011			m_iUniqueLuxuryCities += trait->GetUniqueLuxuryCities();2012			m_iUniqueLuxuryQuantity	+= trait->GetUniqueLuxuryQuantity();2013			m_iWorkerSpeedModifier += trait->GetWorkerSpeedModifier();2014			m_iAfraidMinorPerTurnInfluence += trait->GetAfraidMinorPerTurnInfluence();2015			m_iLandTradeRouteRangeBonus += trait->GetLandTradeRouteRangeBonus();2016#if defined(MOD_TRAITS_TRADE_ROUTE_BONUSES)2017			m_iSeaTradeRouteRangeBonus += trait->GetSeaTradeRouteRangeBonus();2018#endif2019			m_iTradeReligionModifier += trait->GetTradeReligionModifier();2020			m_iTradeBuildingModifier += trait->GetTradeBuildingModifier();20212022			if(trait->IsFightWellDamaged())2023			{2024				m_bFightWellDamaged = true;2025				// JON: Changing the way this works. Above line can/should probably be removed at some point2026				int iWoundedUnitDamageMod = /*-50*/ GC.getTRAIT_WOUNDED_DAMAGE_MOD();2027				m_pPlayer->ChangeWoundedUnitDamageMod(iWoundedUnitDamageMod);2028			}2029			if(trait->IsMoveFriendlyWoodsAsRoad())2030			{2031				m_bMoveFriendlyWoodsAsRoad = true;2032			}2033			if(trait->IsFasterAlongRiver())2034			{2035				m_bFasterAlongRiver = true;2036			}2037			if(trait->IsFasterInHills())2038			{2039				m_bFasterInHills = true;2040			}2041			if(trait->IsEmbarkedAllWater())2042			{2043				m_bEmbarkedAllWater = true;2044			}2045			if(trait->IsEmbarkedToLandFlatCost())2046			{2047				m_bEmbarkedToLandFlatCost = true;2048			}2049			if(trait->IsNoHillsImprovementMaintenance())2050			{2051				m_bNoHillsImprovementMaintenance = true;2052			}2053			if(trait->IsTechBoostFromCapitalScienceBuildings())2054			{2055				m_bTechBoostFromCapitalScienceBuildings = true;2056			}2057			if(trait->IsStaysAliveZeroCities())2058			{2059				m_bStaysAliveZeroCities = true;2060			}2061			if(trait->IsFaithFromUnimprovedForest())2062			{2063				m_bFaithFromUnimprovedForest = true;2064			}2065#if defined(MOD_TRAITS_ANY_BELIEF)2066			if(trait->IsAnyBelief())2067			{2068				m_bAnyBelief = true;2069			}2070#endif2071			if(trait->IsBonusReligiousBelief())2072			{2073				m_bBonusReligiousBelief = true;2074			}2075			if(trait->IsAbleToAnnexCityStates())2076			{2077				m_bAbleToAnnexCityStates = true;2078			}2079			if(trait->IsCrossesMountainsAfterGreatGeneral())2080			{2081				m_bCrossesMountainsAfterGreatGeneral = true;2082			}2083#if defined(MOD_TRAITS_CROSSES_ICE)2084			if(trait->IsCrossesIce())2085			{2086				m_bCrossesIce = true;2087			}2088#endif2089#if defined(MOD_TRAITS_GG_FROM_BARBARIANS)2090			if(trait->IsGGFromBarbarians())2091			{2092				m_bGGFromBarbarians = true;2093			}2094#endif2095			if(trait->IsMayaCalendarBonuses())2096			{2097				m_bMayaCalendarBonuses = true;2098			}2099			if (trait->IsNoAnnexing())2100			{2101				m_bNoAnnexing = true;2102			}2103			if (trait->IsTechFromCityConquer())2104			{2105				m_bTechFromCityConquer = true;2106			}2107			if (trait->IsUniqueLuxuryRequiresNewArea())2108			{2109				m_bUniqueLuxuryRequiresNewArea = true;2110			}2111			if (trait->IsRiverTradeRoad())2112			{2113				m_bRiverTradeRoad = true;2114			}2115			if (trait->IsAngerFreeIntrusionOfCityStates())2116			{2117				m_bAngerFreeIntrusionOfCityStates = true;2118			}21192120			for(int iYield = 0; iYield < NUM_YIELD_TYPES; iYield++)2121			{2122				if(trait->GetExtraYieldThreshold(iYield) > m_iExtraYieldThreshold[iYield])2123				{2124					m_iExtraYieldThreshold[iYield] = trait->GetExtraYieldThreshold(iYield);2125				}2126				m_iFreeCityYield[iYield] = trait->GetYieldChange(iYield);2127				m_iYieldChangeStrategicResources[iYield] = trait->GetYieldChangeStrategicResources(iYield);2128				m_iYieldChangeNaturalWonder[iYield] = trait->GetYieldChangeNaturalWonder(iYield);2129				m_iYieldChangePerTradePartner[iYield] = trait->GetYieldChangePerTradePartner(iYield);2130				m_iYieldChangeIncomingTradeRoute[iYield] = trait->GetYieldChangeIncomingTradeRoute(iYield);2131				m_iYieldRateModifier[iYield] = trait->GetYieldModifier(iYield);21322133				for(int iFeatureLoop = 0; iFeatureLoop < GC.getNumFeatureInfos(); iFeatureLoop++)2134				{2135					int iChange = trait->GetUnimprovedFeatureYieldChanges((FeatureTypes)iFeatureLoop, (YieldTypes)iYield);2136					if(iChange > 0)2137					{2138						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppaaiUnimprovedFeatureYieldChange[iFeatureLoop];2139						yields[iYield] = (m_ppaaiUnimprovedFeatureYieldChange[iFeatureLoop][iYield] + iChange);2140						m_ppaaiUnimprovedFeatureYieldChange[iFeatureLoop] = yields;2141					}21422143#if defined(MOD_API_UNIFIED_YIELDS)2144					iChange = trait->GetCityYieldFromUnimprovedFeature((FeatureTypes)iFeatureLoop, (YieldTypes)iYield);2145					if(iChange > 0)2146					{2147						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppiCityYieldFromUnimprovedFeature[iFeatureLoop];2148						yields[iYield] = (m_ppiCityYieldFromUnimprovedFeature[iFeatureLoop][iYield] + iChange);2149						m_ppiCityYieldFromUnimprovedFeature[iFeatureLoop] = yields;2150					}2151#endif2152				}21532154				for(int iImprovementLoop = 0; iImprovementLoop < GC.getNumImprovementInfos(); iImprovementLoop++)2155				{2156					int iChange = trait->GetImprovementYieldChanges((ImprovementTypes)iImprovementLoop, (YieldTypes)iYield);2157					if(iChange > 0)2158					{2159						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppaaiImprovementYieldChange[iImprovementLoop];2160						yields[iYield] = (m_ppaaiImprovementYieldChange[iImprovementLoop][iYield] + iChange);2161						m_ppaaiImprovementYieldChange[iImprovementLoop] = yields;2162					}2163				}21642165#if defined(MOD_API_UNIFIED_YIELDS) && defined(MOD_API_PLOT_YIELDS)2166				for(int iPlotLoop = 0; iPlotLoop < GC.getNumPlotInfos(); iPlotLoop++)2167				{2168					int iChange = trait->GetPlotYieldChanges((PlotTypes)iPlotLoop, (YieldTypes)iYield);2169					if(iChange > 0)2170					{2171						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppiPlotYieldChange[iPlotLoop];2172						yields[iYield] = (m_ppiPlotYieldChange[iPlotLoop][iYield] + iChange);2173						m_ppiPlotYieldChange[iPlotLoop] = yields;2174					}2175				}2176#endif21772178#if defined(MOD_API_UNIFIED_YIELDS)2179				for(int iBuildingClassLoop = 0; iBuildingClassLoop < GC.getNumBuildingClassInfos(); iBuildingClassLoop++)2180				{2181					int iChange = trait->GetBuildingClassYieldChanges((BuildingClassTypes)iBuildingClassLoop, (YieldTypes)iYield);2182					if(iChange > 0)2183					{2184						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppiBuildingClassYieldChange[iBuildingClassLoop];2185						yields[iYield] = (m_ppiBuildingClassYieldChange[iBuildingClassLoop][iYield] + iChange);2186						m_ppiBuildingClassYieldChange[iBuildingClassLoop] = yields;2187					}2188				}21892190				m_iCapitalYieldChanges[iYield] = trait->GetCapitalYieldChanges(iYield);2191				m_iCityYieldChanges[iYield] = trait->GetCityYieldChanges(iYield);2192				m_iCoastalCityYieldChanges[iYield] = trait->GetCoastalCityYieldChanges(iYield);2193				m_iGreatWorkYieldChanges[iYield] = trait->GetGreatWorkYieldChanges(iYield);21942195				for(int iFeatureLoop = 0; iFeatureLoop < GC.getNumFeatureInfos(); iFeatureLoop++)2196				{2197					int iChange = trait->GetFeatureYieldChanges((FeatureTypes)iFeatureLoop, (YieldTypes)iYield);2198					if(iChange > 0)2199					{2200						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppiFeatureYieldChange[iFeatureLoop];2201						yields[iYield] = (m_ppiFeatureYieldChange[iFeatureLoop][iYield] + iChange);2202						m_ppiFeatureYieldChange[iFeatureLoop] = yields;2203					}2204				}22052206				for(int iResourceLoop = 0; iResourceLoop < GC.getNumResourceInfos(); iResourceLoop++)2207				{2208					int iChange = trait->GetResourceYieldChanges((ResourceTypes)iResourceLoop, (YieldTypes)iYield);2209					if(iChange > 0)2210					{2211						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppiResourceYieldChange[iResourceLoop];2212						yields[iYield] = (m_ppiResourceYieldChange[iResourceLoop][iYield] + iChange);2213						m_ppiResourceYieldChange[iResourceLoop] = yields;2214					}2215				}22162217				for(int iTerrainLoop = 0; iTerrainLoop < GC.getNumTerrainInfos(); iTerrainLoop++)2218				{2219					int iChange = trait->GetTerrainYieldChanges((TerrainTypes)iTerrainLoop, (YieldTypes)iYield);2220					if(iChange > 0)2221					{2222						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppiTerrainYieldChange[iTerrainLoop];2223						yields[iYield] = (m_ppiTerrainYieldChange[iTerrainLoop][iYield] + iChange);2224						m_ppiTerrainYieldChange[iTerrainLoop] = yields;2225					}2226				}22272228				m_iYieldFromKills[iYield] = trait->GetYieldFromKills((YieldTypes) iYield);2229				m_iYieldFromBarbarianKills[iYield] = trait->GetYieldFromBarbarianKills((YieldTypes) iYield);2230				m_iYieldChangeTradeRoute[iYield] = trait->GetYieldChangeTradeRoute(iYield);2231				m_iYieldChangeWorldWonder[iYield] = trait->GetYieldChangeWorldWonder(iYield);22322233				for(int iDomainLoop = 0; iDomainLoop < NUM_DOMAIN_TYPES; iDomainLoop++)2234				{2235					int iChange = trait->GetTradeRouteYieldChange((DomainTypes)iDomainLoop, (YieldTypes)iYield);2236					if(iChange > 0)2237					{2238						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppiTradeRouteYieldChange[iDomainLoop];2239						yields[iYield] = (m_ppiTradeRouteYieldChange[iDomainLoop][iYield] + iChange);2240						m_ppiTradeRouteYieldChange[iDomainLoop] = yields;2241					}2242				}22432244				for(int iGreatPersonLoop = 0; iGreatPersonLoop < GC.getNumGreatPersonInfos(); iGreatPersonLoop++)2245				{2246					int iChange = trait->GetGreatPersonExpendedYield((GreatPersonTypes)iGreatPersonLoop, (YieldTypes)iYield);2247					if(iChange > 0)2248					{2249						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppiGreatPersonExpendedYield[iGreatPersonLoop];2250						yields[iYield] = (m_ppiGreatPersonExpendedYield[iGreatPersonLoop][iYield] + iChange);2251						m_ppiGreatPersonExpendedYield[iGreatPersonLoop] = yields;2252					}22532254					m_piGoldenAgeGreatPersonRateModifier[iGreatPersonLoop] = trait->GetGoldenAgeGreatPersonRateModifier((GreatPersonTypes) iGreatPersonLoop);2255				}2256#endif22572258				for(int iSpecialistLoop = 0; iSpecialistLoop < GC.getNumSpecialistInfos(); iSpecialistLoop++)2259				{2260					int iChange = trait->GetSpecialistYieldChanges((SpecialistTypes)iSpecialistLoop, (YieldTypes)iYield);2261					if(iChange > 0)2262					{2263						Firaxis::Array<int, NUM_YIELD_TYPES> yields = m_ppaaiSpecialistYieldChange[iSpecialistLoop];2264						yields[iYield] = (m_ppaaiSpecialistYieldChange[iSpecialistLoop][iYield] + iChange);2265						m_ppaaiSpecialistYieldChange[iSpecialistLoop] = yields;2266					}2267				}2268			}22692270#if defined(MOD_API_UNIFIED_YIELDS)2271			for(int iGreatPersonLoop = 0; iGreatPersonLoop < GC.getNumGreatPersonInfos(); iGreatPersonLoop++)2272			{2273				m_piGoldenAgeGreatPersonRateModifier[iGreatPersonLoop] = trait->GetGoldenAgeGreatPersonRateModifier((GreatPersonTypes) iGreatPersonLoop);2274			}2275#endif22762277			CvAssert(GC.getNumTerrainInfos() <= NUM_TERRAIN_TYPES);2278			for(int iTerrain = 0; iTerrain < GC.getNumTerrainInfos(); iTerrain++)2279			{2280				m_iStrategicResourceQuantityModifier[iTerrain] = trait->GetStrategicResourceQuantityModifier(iTerrain);2281			}22822283			for(int iResource = 0; iResource < GC.getNumResourceInfos(); iResource++)2284			{2285				m_aiResourceQuantityModifier[iResource] = trait->GetResourceQuantityModifier(iResource);2286			}22872288			for (int iUnitClass = 0; iUnitClass < GC.getNumUnitClassInfos(); iUnitClass++)2289			{2290				m_abNoTrain[iUnitClass] = trait->NoTrain((UnitClassTypes)iUnitClass);2291			}22922293			FreeTraitUnit traitUnit;2294			traitUnit.m_iFreeUnit = (UnitTypes)trait->GetFreeUnitClassType();2295			if(traitUnit.m_iFreeUnit != NO_UNITCLASS)2296			{2297				traitUnit.m_ePrereqTech = trait->GetFreeUnitPrereqTech();2298				m_aFreeTraitUnits.push_back(traitUnit);2299			}23002301			m_eCombatBonusImprovement = trait->GetCombatBonusImprovement();23022303			int iNumUnitCombatClassInfos = GC.getNumUnitCombatClassInfos();2304			for(int jJ= 0; jJ < iNumUnitCombatClassInfos; jJ++)2305			{2306				m_paiMovesChangeUnitCombat[jJ] += trait->GetMovesChangeUnitCombat(jJ);2307				m_paiMaintenanceModifierUnitCombat[jJ] += trait->GetMaintenanceModifierUnitCombat(jJ);2308			}23092310			for(int iResourceLoop = 0; iResourceLoop < GC.getNumResourceInfos(); iResourceLoop++)2311			{2312				FreeResourceXCities temp = trait->GetFreeResourceXCities((ResourceTypes)iResourceLoop);2313				if(temp.m_iResourceQuantity > 0)2314				{2315					m_aFreeResourceXCities[iResourceLoop] = temp;2316				}2317			}2318		}2319	}2320}

Calls

Called by