What yields can be improved by traits?

Skaz881

History Major
Joined
Dec 15, 2013
Messages
1,375
Location
Crystal Lake, Illinois, USA.
I'm on the last few civilizations for my mod, but I've had several trait enhancements fail on me. I tried to add science to a couple of buildings using Trait_BuildingYieldChanges only to be informed via logs that it wasn't a valid table. Trying to emulate the Mohenjo Daro wonder, I tried adding river plot yield changes via Trait_RiverPlotYieldChanges only for that to be invalid as well. Since I still want to add yields to terrain for Venice and the Shoshone, I'm left wondering what is valid besides improvement yields.
 
I'm on the last few civilizations for my mod, but I've had several trait enhancements fail on me. I tried to add science to a couple of buildings using Trait_BuildingYieldChanges only to be informed via logs that it wasn't a valid table. Trying to emulate the Mohenjo Daro wonder, I tried adding river plot yield changes via Trait_RiverPlotYieldChanges only for that to be invalid as well. Since I still want to add yields to terrain for Venice and the Shoshone, I'm left wondering what is valid besides improvement yields.

Niether of those tables are in the table definitions of valid <Trait_something> tables so far as I can see. So the game doesn't have any idea what to do with such tables. You can't copy the <_something> part of a table name from one type of table (such as <Building_> to another type of table such as <Traits_> and get it to work. Only the predefined tables for each type of game element (such as Buildings, Triats, Units, etc.) will work for that type of game element. You can change improvement yields using <Trait_ImprovementYieldChanges>, and you can change yields from unimproved features such as forest or jungle tiles using <Trait_UnimprovedFeatureYieldChanges>. But there's no river plot, sea plot, lake plot, or terrain plot-type tables within <Traits_something> that allows you to directly alter yields from specified plot tiles.

The <Trait_Terrains> table appears to be for altering the amount of strategic resources added to empire stocks based on the type of terrain where the strategic resource occurs. I've never experimented with this table so I'm not sure exactly how it works, but the table definition is as follows:
Code:
	<Table name="Trait_Terrains">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="TerrainType" type="text"/>
		<Column name="StrategicResourceQuantityModifier" type="integer" default="0"/>
	</Table>
 
Depending on what exactly you want to do, you can use unique buildings to give a civ "extra" yields from a building. Just copy the default building by provide the civilization specific building with extra whatever.

If you want to make a trait provide extra yield from tiles adjacent to rivers you can. You'll need to make a building that provides the yield (look at the hydro plant for an example) and then give that building as part of the trait (see the way Carthage gets harbors).
 
I tried to add science to a couple of buildings using Trait_BuildingYieldChanges only to be informed via logs that it wasn't a valid table.
It would be possible to do this by adding a building that will only be given to CIV_X in their capital. The exact method will depend on whether you are building a mod for Vanilla, G&K or BNW.
Trying to emulate the Mohenjo Daro wonder, I tried adding river plot yield changes via Trait_RiverPlotYieldChanges only for that to be invalid as well. Since I still want to add yields to terrain for Venice and the Shoshone, I'm left wondering what is valid besides improvement yields.
It is also possible to do this by adding a <FreeBuilding>BUILDING_SOMETHING</FreeBuilding> to the leader trait for the required CIV, and then have BUILDING_SOMETHING give enhancements to river plot yields, as an example. Again, the exact method will depend on whether you are building the mod for Vanilla, G&K, or BNW. (Note that this might not even be possible with Vanilla as I can't remember whether any of the Vanilla CIVS ever had a <FreeBuilding> command as part of a leader <Traits> definition.)

Ninja'd by Machiavelli24 :p

See this tutorial I saved to mediafire as an example of what can be done for BNW. The tutorial is for adding a building for free in every city.

To add the river plot yields effect you would want this
Code:
<Building_RiverPlotYieldChanges>
	<Row>
		<BuildingType>BUILDING_HIDDEN</BuildingType>
		<YieldType>YIELD_GOLD</YieldType>
		<Yield>1</Yield>
	</Row>
	<Row>
		<BuildingType>BUILDING_HIDDEN</BuildingType>
		<YieldType>YIELD_CULTURE</YieldType>
		<Yield>1</Yield>
	</Row>
</Building_RiverPlotYieldChanges>
But you will have to change YIELD_GOLD and/or YIELD_CULTURE to what you actually want. You will also need to change BUILDING_HIDDEN and BUILDINGCLASS_HIDDEN to something more unique. And if you add this effect to multiple CIVs, you will need a different and unique name for BUILDING_HIDDEN and BUILDINGCLASS_HIDDEN for each civ.

Note that you shouldn't try to use an <EspionageModifier> command in such a building. I recently ran into trouble using that command in a hidden <FreeBuilding> and haven't as yet determined whether the problem is inherent in the <FreeBuilding> effect given as a part of a leader trait, or whether it's actually inherent to adding a hidden building using this method.
 
I'm on the last few civilizations for my mod, but I've had several trait enhancements fail on me. I tried to add science to a couple of buildings using Trait_BuildingYieldChanges only to be informed via logs that it wasn't a valid table.
For this effect you can use the following as a starting point. This method is 'self-contained' as shown. It does not require anything to be added to a leader's <Traits>. Also, it is only good for adding a specified building in a player's capital city. No other cities get the building. I am not sure if this 2nd free capital-city building will 'move' with the palace if a player's orignal capital gets captured.
Spoiler :
Code:
<GameData>
	<Civilization_FreeBuildingClasses>
		<Row>
			<CivilizationType>CIVILIZATION_AMERICA</CivilizationType>
			<BuildingClassType>BUILDINGCLASS_WASHINGTON_CAPITAL</BuildingClassType>
		</Row>
	</Civilization_FreeBuildingClasses>

	<Buildings>
		<Row>
			<Type>BUILDING_WASHINGTON_CAPITAL</Type>
			<BuildingClass>BUILDINGCLASS_WASHINGTON_CAPITAL</BuildingClass>
			<Cost>-1</Cost>
			<PrereqTech>NULL</PrereqTech>
			<ArtDefineTag>NONE</ArtDefineTag>
			<MinAreaSize>-1</MinAreaSize>
			<NeverCapture>true</NeverCapture>
			[COLOR="Blue"]<PortraitIndex>0</PortraitIndex>
			<IconAtlas>CIV_COLOR_ATLAS</IconAtlas>[/COLOR]
			<Help>TXT_KEY_BUILDING_WASHINGTON_CAPITAL_HELP</Help>
			<Description>TXT_KEY_BUILDING_WASHINGTON_CAPITAL</Description>
			<Civilopedia>TXT_KEY_BUILDING_WASHINGTON_CAPITAL_PEDIA</Civilopedia>
			<Strategy>TXT_KEY_BUILDING_WASHINGTON_CAPITAL_STRATEGY</Strategy>
		</Row>
	</Buildings>

	<BuildingClasses>
		<Row>
			<Type>BUILDINGCLASS_WASHINGTON_CAPITAL</Type>
			<DefaultBuilding>BUILDING_WASHINGTON_CAPITAL</DefaultBuilding>
			<Description>TXT_KEY_BUILDING_WASHINGTON_CAPITAL</Description>
		</Row>
	</BuildingClasses>

	<Building_BuildingClassYieldChanges>
		<Row>
			<BuildingType>BUILDING_WASHINGTON_CAPITAL</BuildingType>
			<BuildingClassType>BUILDINGCLASS_CASTLE</BuildingClassType>
			<YieldType>YIELD_SCIENCE</YieldType>
			<YieldChange>1</YieldChange>
		</Row>
	</Building_BuildingClassYieldChanges>


	<Language_en_US>
		<Row Tag="TXT_KEY_BUILDING_WASHINGTON_CAPITAL">
			<Text>Name</Text>
		</Row>
		<Row Tag="TXT_KEY_BUILDING_WASHINGTON_CAPITAL_HELP">
			<Text>Stuff added</Text>
		</Row>
		<Row Tag="TXT_KEY_BUILDING_WASHINGTON_CAPITAL_STRATEGY">
			<Text>Adds stuff</Text>
		</Row>
		<Row Tag="TXT_KEY_BUILDING_WASHINGTON_CAPITAL_PEDIA">
			<Text>Historical stuff</Text>
		</Row>
	</Language_en_US>
</GameData>
Note that this is not a method that will hide the building from a player. The commands in bright blue use the civ icon for CIV AMERICA. You'll want to change WASHINGTON_CAPITAL everywhere to something else, and you'll need to change the Civ name from CIVILIZATION_AMERICA to the appropriate civ. As shown, the <Building_BuildingClassYieldChanges> table would add 1 science to every Castle-Class building everywhere in the empire.

Also note that I haven't tested this exact structure for a 2nd free building given in the capital in-game. I may have made errors, but I don't believe so.
 
Keep in mind that at the top of each of the game's stock XML files exists a schema which lists all available tables and parameters used by that specific file.

For these traits, you can look in the Civ5Traits.xml file and you can see everything you have available to use for defining traits directly:

Code:
	<Table name="Traits">
		<Column name="ID" type="integer" primarykey="true" autoincrement="true"/>
		<Column name="Type" type="text" notnull="true" unique="true"/>
		<Column name="Description" type="text" reference="Language_en_US(Tag)"/>
		<Column name="ShortDescription" type="text" reference="Language_en_US(Tag)"/>
		<Column name="LevelExperienceModifier" type="integer" default="0"/>
		<Column name="GreatPeopleRateModifier" type="integer" default="0"/>
		<Column name="GreatScientistRateModifier" type="integer" default="0"/>
		<Column name="GreatGeneralRateModifier" type="integer" default="0"/>
		<Column name="GreatGeneralExtraBonus" type="integer" default="0"/>
		<Column name="GreatPersonGiftInfluence" type="integer" default="0"/>
		<Column name="MaxGlobalBuildingProductionModifier" type="integer" default="0"/>
		<Column name="MaxTeamBuildingProductionModifier" type="integer" default="0"/>
		<Column name="MaxPlayerBuildingProductionModifier" type="integer" default="0"/>
		<Column name="CityUnhappinessModifier" type="integer" default="0"/>
		<Column name="PopulationUnhappinessModifier" type="integer" default="0"/>
		<Column name="CityStateBonusModifier" type="integer" default="0"/>
		<Column name="CityStateFriendshipModifier" type="integer" default="0"/>
		<Column name="CityStateCombatModifier" type="integer" default="0"/>
		<Column name="LandBarbarianConversionPercent" type="integer" default="0"/>
		<Column name="LandBarbarianConversionExtraUnits" type="integer" default="0"/>
		<Column name="SeaBarbarianConversionPercent" type="integer" default="0"/>
		<Column name="LandUnitMaintenanceModifier" type="integer" default="0"/>
		<Column name="NavalUnitMaintenanceModifier" type="integer" default="0"/>
		<Column name="CapitalBuildingModifier" type="integer" default="0"/>
		<Column name="PlotBuyCostModifier" type="integer" default="0"/>
		<Column name="PlotCultureCostModifier" type="integer" default="0"/>
		<Column name="CultureFromKills" type="integer" default="0"/>
		<Column name="FaithFromKills" type="integer" default="0"/>
		<Column name="CityCultureBonus" type="integer" default="0"/>
		<Column name="CapitalThemingBonusModifier" type="integer" default="0"/>
		<Column name="PolicyCostModifier" type="integer" default="0"/>
		<Column name="CityConnectionTradeRouteChange" type="integer" default="0"/>
		<Column name="WonderProductionModifier" type="integer" default="0"/>
		<Column name="PlunderModifier" type="integer" default="0"/>
		<Column name="ImprovementMaintenanceModifier" type="integer" default="0"/>
		<Column name="GoldenAgeDurationModifier" type="integer" default="0"/>
		<Column name="GoldenAgeMoveChange" type="integer" default="0"/>
		<Column name="GoldenAgeCombatModifier" type="integer" default="0"/>
		<Column name="GoldenAgeTourismModifier" type="integer" default="0"/>
		<Column name="GoldenAgeGreatArtistRateModifier" type="integer" default="0"/>
		<Column name="GoldenAgeGreatMusicianRateModifier" type="integer" default="0"/>
		<Column name="GoldenAgeGreatWriterRateModifier" type="integer" default="0"/>
		<Column name="ExtraEmbarkMoves" type="integer" default="0"/>
		<Column name="NaturalWonderFirstFinderGold" type="integer" default="0"/>
		<Column name="NaturalWonderSubsequentFinderGold" type="integer" default="0"/>
		<Column name="NaturalWonderYieldModifier" type="integer" default="0"/>
		<Column name="NaturalWonderHappinessModifier" type="integer" default="0"/>
		<Column name="NearbyImprovementCombatBonus" type="integer" default="0"/>
		<Column name="NearbyImprovementBonusRange" type="integer" default="0"/>
		<Column name="CultureBuildingYieldChange" type="integer" default="0"/>
		<Column name="CombatBonusVsHigherTech" type="integer" default="0"/>
		<Column name="CombatBonusVsLargerCiv" type="integer" default="0"/>
		<Column name="RazeSpeedModifier" type="integer" default="0"/>
		<Column name="DOFGreatPersonModifier" type="integer" default="0"/>
		<Column name="LuxuryHappinessRetention" type="integer" default="0"/>
		<Column name="ExtraSpies" type="integer" default="0"/>
		<Column name="UnresearchedTechBonusFromKills" type="integer" default="0"/>
		<Column name="ExtraFoundedCityTerritoryClaimRange" type="integer" default="0"/>
		<Column name="FreeSocialPoliciesPerEra" type="integer" default="0"/>
		<Column name="NumTradeRoutesModifier" type="integer" default="0"/>
		<Column name="TradeRouteResourceModifier" type="integer" default="0"/>
		<Column name="UniqueLuxuryCities" type="integer" default="0"/>
		<Column name="UniqueLuxuryQuantity" type="integer" default="0"/>
		<Column name="WorkerSpeedModifier" type="integer" default="0"/>
		<Column name="AfraidMinorPerTurnInfluence" type="integer" default="0"/>
		<Column name="LandTradeRouteRangeBonus" type="integer" default="0"/>
		<Column name="TradeReligionModifier" type="integer" default="0"/>
		<Column name="TradeBuildingModifier" type="integer" default="0"/>
		<Column name="FightWellDamaged" type="boolean" default="false"/>
		<Column name="MoveFriendlyWoodsAsRoad" type="boolean" default="false"/>
		<Column name="FasterAlongRiver" type="boolean" default="false"/>
		<Column name="FasterInHills" type="boolean" default="false"/>
		<Column name="EmbarkedAllWater" type="boolean" default="false"/>
		<Column name="EmbarkedToLandFlatCost" type="boolean" default="false"/>
		<Column name="NoHillsImprovementMaintenance" type="boolean" default="false"/>
		<Column name="TechBoostFromCapitalScienceBuildings" type="boolean" default="false"/>
		<Column name="StaysAliveZeroCities" type="boolean" default="false"/>
		<Column name="FaithFromUnimprovedForest" type="boolean" default="false"/>
		<Column name="BonusReligiousBelief" type="boolean" default="false"/>
		<Column name="AbleToAnnexCityStates" type="boolean" default="false"/>
		<Column name="CrossesMountainsAfterGreatGeneral" type="boolean" default="false"/>
		<Column name="MayaCalendarBonuses" type="boolean" default="false"/>
		<Column name="NoAnnexing" type="boolean" default="false"/>
		<Column name="TechFromCityConquer" type="boolean" default="false"/>
		<Column name="UniqueLuxuryRequiresNewArea" type="boolean" default="false"/>
		<Column name="RiverTradeRoad" type="boolean" default="false"/>
		<Column name="AngerFreeIntrusionOfCityStates" type="boolean" default="false"/>
		<Column name="FreeUnit" type="text" reference="UnitClasses(Type)" default="NULL"/>
		<Column name="FreeUnitPrereqTech" type="text" reference="Technologies(Type)" default="NULL"/>
		<Column name="CombatBonusImprovement" type="text" reference="Improvements(Type)" default="NULL"/>
		<Column name="FreeBuilding" type="text" reference="Buildings(Type)" default="NULL"/>
		<Column name="FreeBuildingOnConquest" type="text" reference="Buildings(Type)" default="NULL"/>
		<Column name="ObsoleteTech" type="text" reference="Technologies(Type)" default="NULL"/>
		<Column name="PrereqTech" type="text" reference="Technologies(Type)" default="NULL"/>
	</Table>
	<Table name="Trait_ExtraYieldThresholds">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="Yield" type="integer"/>
	</Table>
	<Table name="Trait_YieldChanges">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="Yield" type="integer"/>
	</Table>
	<Table name="Trait_YieldChangesStrategicResources">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="Yield" type="integer"/>
	</Table>
	<Table name="Trait_YieldChangesNaturalWonder">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="Yield" type="integer"/>
	</Table>
	<Table name="Trait_YieldChangesPerTradePartner">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="Yield" type="integer"/>
	</Table>
	<Table name="Trait_YieldChangesIncomingTradeRoute">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="Yield" type="integer"/>
	</Table>
	<Table name="Trait_YieldModifiers">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="Yield" type="integer"/>
	</Table>
	<Table name="Trait_FreePromotions">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="PromotionType" type="text" reference="UnitPromotions(Type)"/>
	</Table>
	<Table name="Trait_FreePromotionUnitCombats">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="UnitCombatType" type="text" reference="UnitCombatInfos(Type)"/>
		<Column name="PromotionType" type="text" reference="UnitPromotions(Type)"/>
	</Table>
	<Table name="Trait_MovesChangeUnitCombats">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="UnitCombatType" type="text" reference="UnitCombatInfos(Type)"/>
		<Column name="MovesChange" type="int"/>
	</Table>
	<Table name="Trait_MaintenanceModifierUnitCombats">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="UnitCombatType" type="text" reference="UnitCombatInfos(Type)"/>
		<Column name="MaintenanceModifier" type="int"/>
	</Table>
	<Table name="Trait_Terrains">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="TerrainType" type="text"/>
		<Column name="StrategicResourceQuantityModifier" type="integer" default="0"/>
	</Table>
	<Table name="Trait_ResourceQuantityModifiers">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="ResourceType" type="text" reference="Resources(Type)"/>
		<Column name="ResourceQuantityModifier" type="integer" default="0"/>
	</Table>
	<Table name="Trait_FreeResourceFirstXCities">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="ResourceType" type="text" reference="Resources(Type)"/>
		<Column name="ResourceQuantity" type="integer"/>
		<Column name="NumCities" type="integer"/>
	</Table>
	<Table name="Trait_ImprovementYieldChanges">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="ImprovementType" type="text" reference="Improvements(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="Yield" type="integer"/>
	</Table>
	<Table name="Trait_SpecialistYieldChanges">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="SpecialistType" type="text" reference="Specialists(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="Yield" type="integer"/>
	</Table>
	<Table name="Trait_UnimprovedFeatureYieldChanges">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="FeatureType" type="text" reference="Features(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="Yield" type="integer"/>
	</Table>
	<Table name="Trait_NoTrain">
		<Column name="TraitType" type="text" reference="Traits(Type)"/>
		<Column name="UnitClassType" type="text" notnull="true" reference="UnitClasses(Type)"/>
	</Table>

I found browsing these files to be invaluable while working on my very first Civ/modding project. Personally, I use Sublime Text since I'm already using it for coding, so I added the entire XML folder and with a few keystrokes, I can search every XML file simultaneously.
 
It's something to think about, but I was trying to keep to the simplicity of the original mod. If I can't come up with something else though, I may do it.
 
If you give a unit combat class a promotion that is normally lost on upgrade, do you have to change that? For example I've decided to do this for Polynesia because I think it fits with their wayfinding attribute (although 4 may be a bit too much):
Code:
<Row>
			<TraitType>TRAIT_WAYFINDING</TraitType>
			<UnitCombatType>UNITCOMBAT_MOUNTED</UnitCombatType>
			<PromotionType>PROMOTION_EXTRA_SIGHT_IV</PromotionType>
		</Row>

This is for all unit combat types, but I don't want it to go away when they upgrade.
 
Each promotion has a boolean value "LostWithUpgrade" (default false) that determines if the unit keeps the promotion when the unit is upgraded.
 
Back
Top Bottom