Adjusting Tile Improvements and Districts yields with Tech / Civic constrains.

Joined
Jan 10, 2019
Messages
2,833
What are codes (and stages) needed to adjust yields generated by Tile Improvements and Districts under the constrains that requires earnings of a specific tech or civic to take effect?

For example.
- TECH_IRONWORKING adds 1 food generates by farms and plantations, +1 production yields to mine and quarry
- CIVIC_ETHICS (Mod additions for Classical Era) adds +1 Amenity to Holy Districts, and also increase +1 Great Prophet Point generates by EACH districts.
 
For improvements getting additional yields from tech there is a table called: Improvement_BonusYieldChanges
so its rather straigh forward:
Code:
INSERT INTO Improvement_BonusYieldChanges (ID, ImprovementType, YieldType, BonusYieldChange, PrereqTech)
VALUES ('FarmsFoodIronWorking', 'IMPROVEMENT_FARM', 'YIELD_FOOD', 1, 'TECH_IRON_WORKING'),
      ('PlantationsFoodIronWorking', 'IMPROVEMENT_PLANTATION', 'YIELD_FOOD', 1, 'TECH_IRON_WORKING'),
       ('MinesProductionIronWorking', 'IMPROVEMENT_MINE', 'YIELD_PRODUCTION', 1, 'TECH_IRON_WORKING'),
       ('QuarriesProductionIronWorking', 'IMPROVEMENT_QUARRY', 'YIELD_PRODUCTION', 1, 'TECH_IRON_WORKING');

For amenity in Holy Site You might use modifiers:
Code:
INSERT INTO DistrictModifiers (DistrictType, ModifierId)
VALUES ('DISTRICT_HOLYSITE', 'HOLY_SITE_AMENITY_FROM_ETHICS');

INSERT INTO Modifiers (ModifierId, ModifierType, SubjectRequirementSetId)
VALUES ('HOLY_SITE_AMENITY_FROM_ETHICS', 'MODIFIER_ADJUST_AMENITIES_IN_DISTRICT', 'REQUIRES_CIVIC_ETHICS');

INSERT INTO ModifierArguments (ModifierId, Name, Value)
VALUES ('HOLY_SITE_AMENITY_FROM_ETHICS', 'Amount', 1);

INSERT INTO RequirementSets (RequirementSetId, RequirementSetType)
VALUES ('REQUIRES_CIVIC_ETHICS', 'REQUIREMENTSET_TEST_ALL');

INSERT INTO RequirementSetRequirements (RequirementSetId, RequirementId)
VALUES ('REQUIRES_CIVIC_ETHICS', 'REQUIREMENT_PLAYER_HAS_ETHICS');

INSERT INTO Requirements (RequirementId, RequirementType)
VALUES ('REQUIREMENT_PLAYER_HAS_ETHICS', 'REQUIREMENT_PLAYER_HAS_CIVIC');

INSERT INTO RequirementArguments (RequirementId, Name, Value)
VALUES ('REQUIREMENT_PLAYER_HAS_ETHICS', 'CivicType', 'CIVIC_ETHICS');

For Great Prophet Points You could also use modifiers but attached to a civic:
Code:
INSERT INTO CivicModifiers (CivicType, ModifierId)
VALUES ('CIVIC_ETHICS', 'GREAT_PROPHET_POINTS_FROM_ETHICS');

INSERT INTO Modifiers (ModifierId, ModifierType)
VALUES ('GREAT_PROPHET_POINTS_FROM_ETHICS', 'MODIFIER_PLAYER_DISTRICTS_ADJUST_GREAT_PERSON_POINTS');

INSERT INTO ModifierArguments (ModifierId, Name, Value)
VALUES ('GREAT_PROPHET_POINTS_FROM_ETHICS', 'GreatPersonClassType', 'GREAT_PERSON_CLASS_PROPHET'),
       ('GREAT_PROPHET_POINTS_FROM_ETHICS', 'Amount', 1);

Note:
This is just from a top of my head, I did not test this :p
 
I'm using sql in my mods, but sure, here is a XML version:
Code:
<Improvement_BonusYieldChanges>
   <Row Id="FarmsFoodIronWorking" ImprovementType="IMPROVEMENT_FARM" YieldType="YIELD_FOOD" BonusYieldChange="1" PrereqTech="TECH_IRON_WORKING"/>
   <Row Id="PlantationsFoodIronWorking" ImprovementType="IMPROVEMENT_PLANTATION" YieldType="YIELD_FOOD" BonusYieldChange="1" PrereqTech="TECH_IRON_WORKING"/>
   <Row Id="MinesProductionIronWorking" ImprovementType="IMPROVEMENT_MINE" YieldType="YIELD_PRODUCTION" BonusYieldChange="1" PrereqTech="TECH_IRON_WORKING"/>
   <Row Id="QuarriesProductionIronWorking" ImprovementType="IMPROVEMENT_QUARRY" YieldType="YIELD_PRODUCTION" BonusYieldChange="1" PrereqTech="TECH_IRON_WORKING"/>
</Improvement_BonusYieldChanges>

<CivicModifiers>
   <Row>
       <CivicType>CIVIC_ETHICS</CivicType>
       <ModifierId>HOLY_SITE_AMENITY_FROM_ETHICS</ModifierId>
   </Row>
   <Row>
       <CivicType>CIVIC_ETHICS</CivicType>
       <ModifierId>GREAT_PROPHET_POINTS_FROM_ETHICS</ModifierId>
   </Row>
</CivicModifiers>

<Modifiers>
   <Row>
       <ModifierId>HOLY_SITE_AMENITY_FROM_ETHICS</CivicType>
       <ModifierType>MODIFIER_ADJUST_AMENITIES_IN_DISTRICT</ModifierId>
       <SubjectRequirementSetId>DISTRICT_IS_HOLY_SITE</SubjectRequirementSetId>
   </Row>
   <Row>
       <ModifierId>GREAT_PROPHET_POINTS_FROM_ETHICS</CivicType>
       <ModifierType>MODIFIER_PLAYER_DISTRICTS_ADJUST_GREAT_PERSON_POINTS</ModifierId>
   </Row>
</Modifiers>

<ModifierArguments>
   <Row>
       <ModifierId>HOLY_SITE_AMENITY_FROM_ETHICS</ModifierId>
       <Name>Amount</Name>
       <Value>1</Value>
   </Row>
   <Row>
       <ModifierId>GREAT_PROPHET_POINTS_FROM_ETHICS</ModifierId>
       <Name>GreatPersonClassType</Name>
       <Value>GREAT_PERSON_CLASS_PROPHET</Value>
   </Row>
   <Row>
       <ModifierId>GREAT_PROPHET_POINTS_FROM_ETHICS</ModifierId>
       <Name>Amount</Name>
       <Value>1</Value>
   </Row>
</ModifierArguments>

NOTE:
I moved the Amenity for Holy Site modifier to CivicModifiers.
Part based on CIVIC_ETHICS has to be in mod with LoadOrder higher than mod that adds it.
 
Back
Top Bottom