Can i give the different FOOD_yield for a new farm_improvement?

raubak

Chieftain
Joined
Aug 5, 2019
Messages
87
Can i give the different FOOD_yield for a new farm_improvement ,by the tile ,cuz as i can see straight it is impossible only by civic or tech ...if is it possyble by modifire ?
 
If you mean:
Can I make a Leader or Civ get more food from their farms than other players?
The answer is yes.

And you do it with a modifier. Here is one way to do it:
Code:
<GameData>
	<Types>
		<Row Type="TRAIT_X" Kind="KIND_TRAIT"/>
	</Types>
	<Traits>
		<Row TraitType="TRAIT_X" Name="Farm Food" Description="Farms Add +1 [ICON_Food] Food"/>
	</Traits>
	<Modifiers>
		<Row>
			<ModifierId>FARMS_INCREASED_FOOD_TRAIT_X</ModifierId>
			<ModifierType>MODIFIER_PLAYER_CITIES_ATTACH_MODIFIER</ModifierType>
		</Row>
		<Row>
			<ModifierId>FARMS_PLUS_1_FOOD_MODIFIER_TRAIT_X</ModifierId>
			<ModifierType>MODIFIER_CITY_PLOT_YIELDS_ADJUST_PLOT_YIELD</ModifierType>
			<SubjectRequirementSetId>PLOT_HAS_FARM_REQUIRMEMENT_SET</SubjectRequirementSetId>
		</Row>
	</Modifiers>
	<ModifierArguments>
		<Row>
			<ModifierId>FARMS_INCREASED_FOOD_TRAIT_X</ModifierId>
			<Name>ModifierId</Name>
			<Value>FARMS_PLUS_1_FOOD_MODIFIER_TRAIT_X</Value>
		</Row>
		<Row>
			<ModifierId>FARMS_PLUS_1_FOOD_MODIFIER_TRAIT_X</ModifierId>
			<Name>YieldType</Name>
			<Value>YIELD_FOOD</Value>
		</Row>
		<Row>
			<ModifierId>FARMS_PLUS_1_FOOD_MODIFIER_TRAIT_X</ModifierId>
			<Name>Amount</Name>
			<Value>1</Value>
		</Row>
	</ModifierArguments>
	<Requirements>
		<Row>
			<RequirementId>PLOT_HAS_A_FARM_REQUIREMENT</RequirementId>
			<RequirementType>REQUIREMENT_PLOT_IMPROVEMENT_TYPE_MATCHES</RequirementType>
		</Row>
	</Requirements>
	<RequirementArguments>
		<Row>
			<RequirementId>PLOT_HAS_A_FARM_REQUIREMENT</RequirementId>
			<Name>ImprovementType</Name>
			<Value>IMPROVEMENT_FARM</Value>
		</Row>
	</RequirementArguments>
	<RequirementSets>
		<Row>
			<RequirementSetId>PLOT_HAS_FARM_REQUIRMEMENT_SET</RequirementSetId>
			<RequirementSetType>REQUIREMENTSET_TEST_ALL</RequirementSetType>
		</Row>
	</RequirementSets>
	<RequirementSetRequirements>
		<Row>
			<RequirementSetId>PLOT_HAS_FARM_REQUIRMEMENT_SET</RequirementSetId>
			<RequirementId>PLOT_HAS_A_FARM_REQUIREMENT</RequirementId>
		</Row>
	</RequirementSetRequirements>
	<TraitModifiers>
		<Row TraitType="TRAJANS_COLUMN_TRAIT" ModifierId="FARMS_INCREASED_FOOD_TRAIT_X"/>
	</TraitModifiers>
</GameData>
Attaches a Modifier to Trajan's existing "TRAJANS_COLUMN_TRAIT" which would make all his farms give +1 Food.

With Modifiers you can make a specific Leader or Civ get pretty much anything in terms of yields for any of the game's "Vanilla" terrain improvements. It isn't actually necessary to create a new unique improvement for the leader or civ.

You can also directly attach the modifier for the Farm + 1 Food to the Leader or Civ to a new trait so that the altered effects can show in the civ and leader selection screens. But you also have to add this new trait to the leader or civilization within table LeaderTraits or CivilizationTraits.

In the example above since the Modifier is attached to the existing Trajan's Column trait nothing additional would show in the civ selection screen. Only the original text of the Trajan's Column Trait would show in the set-up screens.
 
Last edited:
Thx for the answer ! but sorry, my question is to add for new unique farm-improvement for new civ , food-yield by the tile (grass, tundra..etc)
 
Then you would need a modifier that has Terrain-Type matching as a Requirement. If you want different yields for Grasslands as compared to Tundra as compared to Plains then you would have to have possibly three or four different modifiers. But you want the improvement's basic yields to cover as many of the terrain-types as possible. So if Grasslands and Plains are to get a total of 2 Food for the Improvement but all other terrains like Tundra and Desert and Snow are only to get 1 Food for the improvement, make the improvement valid for all these Terrain-Types, and give the Improvement an inherent yield of 1 Food. Then you only need a modifier that will adjust this yield by +1 Food in Grasslands and Plains, for a total of 2 Food in those two types of Terrain.

Use table ImprovementModifiers to attach the modifier directly to the improvement.
 
i got lil harder condition like for potato unique improvement , it is possible to grow anywhere but not in the desert nd snow, it gives different food-yield ...i try it make real , then not just ban it for other tiles...
 
If i understood you correctly, then something like this should do the trick:
It's just like regular farms, but with +2 food instead of +1, and can be build on tundra (and tundra hills after civil engineering).

Code:
<?xml version="1.0" encoding="utf-8"?>
<GameData>
    <Types>
        <Row Type="IMPROVEMENT_POTATO_FARM" Kind="KIND_IMPROVEMENT"/>
        <Row Type="TRAIT_CIVILIZATION_POTATO_FARMING" Kind="KIND_TRAIT"/>
    </Types>
    <CivilizationTraits>
        <Row CivilizationType="CIVILIZATION_XYZ" TraitType="TRAIT_CIVILIZATION_POTATO_FARMING"/>
    </CivilizationTraits>
    <Improvements>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" Name="Potato Farm" Description="+2[ICON_Food]" Icon="ICON_IMPROVEMENT_FARM" PlunderType="PLUNDER_HEAL" PlunderAmount="50" Buildable="true" Housing="1" TilesRequired="2" PrereqTech="TECH_IRRIGATION" TraitType="TRAIT_CIVILIZATION_POTATO_FARMING" />
    </Improvements>
    <Improvement_Adjacencies>
        <!-- In case you want adjacencies like regular farms -->
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" YieldChangeId="Potato_MedievalAdjacency"/>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" YieldChangeId="Potato_MechanizedAdjacency"/>
    </Improvement_Adjacencies>
    <Improvement_ValidFeatures>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" FeatureType="FEATURE_FLOODPLAINS"/>
    </Improvement_ValidFeatures>
    <Improvement_ValidTerrains>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" TerrainType="TERRAIN_PLAINS"/>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" TerrainType="TERRAIN_GRASS"/>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" TerrainType="TERRAIN_TUNDRA"/>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" TerrainType="TERRAIN_PLAINS_HILLS" PrereqCivic="CIVIC_CIVIL_ENGINEERING"/>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" TerrainType="TERRAIN_GRASS_HILLS" PrereqCivic="CIVIC_CIVIL_ENGINEERING"/>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" TerrainType="TERRAIN_TUNDRA_HILLS" PrereqCivic="CIVIC_CIVIL_ENGINEERING"/>
    </Improvement_ValidTerrains>
    <Improvement_ValidBuildUnits>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" UnitType="UNIT_BUILDER"/>
    </Improvement_ValidBuildUnits>
    <Improvement_YieldChanges>
        <Row ImprovementType="IMPROVEMENT_POTATO_FARM" YieldType="YIELD_FOOD" YieldChange="2"/>
    </Improvement_YieldChanges>
    <Adjacency_YieldChanges>
        <Row ID="Potato_MedievalAdjacency" Description="Placeholder" YieldType="YIELD_FOOD" YieldChange="1" TilesRequired="2" AdjacentImprovement="IMPROVEMENT_POTATO_FARM" PrereqCivic="CIVIC_FEUDALISM" ObsoleteTech="TECH_REPLACEABLE_PARTS"/>
        <Row ID="Potato_MechanizedAdjacency" Description="Placeholder" YieldType="YIELD_FOOD" YieldChange="1" TilesRequired="1" AdjacentImprovement="IMPROVEMENT_POTATO_FARM" PrereqTech="TECH_REPLACEABLE_PARTS"/>
    </Adjacency_YieldChanges>
</GameData>

Next time you want to do something similar, open <Improvements.xml>, look for things that do similar stuff to what you want to do, copy the relevant lines and make the necessary changes.
 
If i understood you correctly, then something like this should do the trick:
Next time you want to do something similar, open <Improvements.xml>, look for things that do similar stuff to what you want to do, copy the relevant lines and make the necessary changes.
Thx for trying to hаlp - but sorry, my question is to add for new unique farm-improvement for new civ , food-yield BY THE TILE (grass, tundra..etc) ...i аlreаdy solved it by the hаlp of Lee S , just need bunch of modifaers ...
 
Top Bottom