-
Notifications
You must be signed in to change notification settings - Fork 0
tutorials Creating a Technology
ghost-ng edited this page Jan 29, 2026
·
1 revision
This tutorial shows how to add a new technology to Civilization VII's tech tree.
Technologies in Civ VII use the Progression Tree system. Each technology is a KIND_TREE_NODE that belongs to one of the age-specific tech trees:
| Age | Tech Tree |
|---|---|
| Antiquity | TREE_TECHS_AQ |
| Exploration | TREE_TECHS_EX |
| Modern | TREE_TECHS_MO |
MyTechMod/
├── MyTechMod.modinfo
├── data/
│ ├── technology.xml
│ └── technology-text.xml
<?xml version="1.0" encoding="utf-8"?>
<Mod id="my-tech-mod" version="1.0.0" xmlns="ModInfo">
<Properties>
<Name>My New Technology</Name>
<Description>Adds a new technology to the Antiquity tech tree</Description>
<Authors>Your Name</Authors>
</Properties>
<ActionCriteria>
<Criteria id="antiquity">
<AgeInUse>AGE_ANTIQUITY</AgeInUse>
</Criteria>
</ActionCriteria>
<ActionGroups>
<ActionGroup id="game-content" scope="game" criteria="antiquity">
<Actions>
<UpdateDatabase>
<Item>data/technology.xml</Item>
</UpdateDatabase>
<UpdateText>
<Item>data/technology-text.xml</Item>
</UpdateText>
</Actions>
</ActionGroup>
</ActionGroups>
</Mod>Create data/technology.xml:
<?xml version="1.0" encoding="utf-8"?>
<Database>
<!-- Register the type -->
<Types>
<Row Type="NODE_TECH_AQ_ASTRONOMY" Kind="KIND_TREE_NODE"/>
</Types>
<!-- Optional: Add a quote -->
<TypeQuotes>
<Row
Type="NODE_TECH_AQ_ASTRONOMY"
Quote="LOC_TECH_ASTRONOMY_QUOTE"
QuoteAuthor="LOC_TECH_ASTRONOMY_QUOTE_AUTHOR"/>
</TypeQuotes>
<!-- Define the tech in the progression tree -->
<ProgressionTreeNodes>
<Row
ProgressionTreeNodeType="NODE_TECH_AQ_ASTRONOMY"
ProgressionTree="TREE_TECHS_AQ"
Cost="300"
Name="LOC_TECH_ASTRONOMY_NAME"
IconString="tech_astronomy"/>
</ProgressionTreeNodes>
<!-- Set prerequisites (what tech must be researched first) -->
<ProgressionTreePrereqs>
<Row Node="NODE_TECH_AQ_ASTRONOMY" PrereqNode="NODE_TECH_AQ_WRITING"/>
</ProgressionTreePrereqs>
<!-- Define what the tech unlocks -->
<ProgressionTreeNodeUnlocks>
<!-- Unlock a building -->
<Row
ProgressionTreeNodeType="NODE_TECH_AQ_ASTRONOMY"
TargetKind="KIND_CONSTRUCTIBLE"
TargetType="BUILDING_OBSERVATORY"
UnlockDepth="1"/>
<!-- Unlock a modifier effect -->
<Row
ProgressionTreeNodeType="NODE_TECH_AQ_ASTRONOMY"
TargetKind="KIND_MODIFIER"
TargetType="MOD_TECH_ASTRONOMY_SCIENCE_BONUS"
UnlockDepth="1"/>
</ProgressionTreeNodeUnlocks>
</Database>Create data/technology-text.xml:
<?xml version="1.0" encoding="utf-8"?>
<Database>
<LocalizedText>
<Row Tag="LOC_TECH_ASTRONOMY_NAME" Language="en_US">
<Text>Astronomy</Text>
</Row>
<Row Tag="LOC_TECH_ASTRONOMY_QUOTE" Language="en_US">
<Text>The cosmos is within us. We are made of star-stuff.</Text>
</Row>
<Row Tag="LOC_TECH_ASTRONOMY_QUOTE_AUTHOR" Language="en_US">
<Text>Carl Sagan</Text>
</Row>
</LocalizedText>
</Database>| Column | Description |
|---|---|
ProgressionTreeNodeType |
Primary key (your tech type) |
ProgressionTree |
Which tree (TREE_TECHS_AQ, TREE_TECHS_EX, TREE_TECHS_MO) |
Cost |
Science cost to research |
Name |
Localization key for name |
IconString |
Icon identifier |
Repeatable |
If true, can research multiple times (like Future Tech) |
| Column | Description |
|---|---|
ProgressionTreeNodeType |
Your tech type |
TargetKind |
What category is unlocked |
TargetType |
Specific thing to unlock |
UnlockDepth |
At which research depth (1 = first completion, 2 = full completion) |
Hidden |
If true, doesn't show in tech tree UI |
RequiredTraitType |
Only unlock for civilizations with this trait |
| TargetKind | Description |
|---|---|
KIND_CONSTRUCTIBLE |
Buildings, improvements, wonders |
KIND_UNIT |
Units |
KIND_MODIFIER |
Game effects/modifiers |
KIND_PROJECT |
City projects |
KIND_DIPLOMATIC_ACTION |
Diplomatic actions |
To give the tech a direct gameplay effect, create a modifier:
GameEffects file (data/technology-gameeffects.xml):
<?xml version="1.0" encoding="utf-8"?>
<GameEffects xmlns="GameEffects">
<!-- Science bonus from Astronomy -->
<Modifier id="MOD_TECH_ASTRONOMY_SCIENCE_BONUS"
collection="COLLECTION_PLAYER_CITIES"
effect="EFFECT_CITY_ADJUST_YIELD">
<Argument name="YieldType">YIELD_SCIENCE</Argument>
<Argument name="Amount">1</Argument>
</Modifier>
</GameEffects>Add to modinfo:
<UpdateGameEffects>
<Item>data/technology-gameeffects.xml</Item>
</UpdateGameEffects>A technology can require multiple prerequisites:
<ProgressionTreePrereqs>
<Row Node="NODE_TECH_AQ_ASTRONOMY" PrereqNode="NODE_TECH_AQ_WRITING"/>
<Row Node="NODE_TECH_AQ_ASTRONOMY" PrereqNode="NODE_TECH_AQ_MATHEMATICS"/>
</ProgressionTreePrereqs>This requires both Writing AND Mathematics before Astronomy can be researched.
Unlock something only for a specific civilization:
<ProgressionTreeNodeUnlocks>
<!-- Unique unit for Egypt only -->
<Row
ProgressionTreeNodeType="NODE_TECH_AQ_ASTRONOMY"
TargetKind="KIND_UNIT"
TargetType="UNIT_STARGAZER"
UnlockDepth="1"
RequiredTraitType="TRAIT_EGYPT"/>
</ProgressionTreeNodeUnlocks>Technologies have two research depths:
- Depth 1: First completion (usually unlocks buildings/units)
- Depth 2: Full mastery (often unlocks additional modifiers)
<ProgressionTreeNodeUnlocks>
<!-- Unlocks at first completion -->
<Row ProgressionTreeNodeType="NODE_TECH_AQ_ASTRONOMY"
TargetKind="KIND_CONSTRUCTIBLE"
TargetType="BUILDING_OBSERVATORY"
UnlockDepth="1"/>
<!-- Unlocks at full mastery -->
<Row ProgressionTreeNodeType="NODE_TECH_AQ_ASTRONOMY"
TargetKind="KIND_MODIFIER"
TargetType="MOD_ASTRONOMY_MASTERY_BONUS"
UnlockDepth="2"/>
</ProgressionTreeNodeUnlocks>If you want a custom icon:
- Create a 50x50 and 38x38 version of your icon
- Add icon definition:
<IconDefinitions>
<Row>
<ID>tech_astronomy</ID>
<Path>fs://game/my-tech-mod/icons/tech_astronomy.png</Path>
</Row>
</IconDefinitions>- Add
<UpdateIcons>action to modinfo
A full working technology mod:
data/technology.xml:
<?xml version="1.0" encoding="utf-8"?>
<Database>
<Types>
<Row Type="NODE_TECH_AQ_ASTRONOMY" Kind="KIND_TREE_NODE"/>
</Types>
<TypeQuotes>
<Row Type="NODE_TECH_AQ_ASTRONOMY"
Quote="LOC_TECH_ASTRONOMY_QUOTE"
QuoteAuthor="LOC_TECH_ASTRONOMY_QUOTE_AUTHOR"/>
</TypeQuotes>
<ProgressionTreeNodes>
<Row ProgressionTreeNodeType="NODE_TECH_AQ_ASTRONOMY"
ProgressionTree="TREE_TECHS_AQ"
Cost="430"
Name="LOC_TECH_ASTRONOMY_NAME"
IconString="tech_astronomy"/>
</ProgressionTreeNodes>
<ProgressionTreePrereqs>
<Row Node="NODE_TECH_AQ_ASTRONOMY" PrereqNode="NODE_TECH_AQ_WRITING"/>
<Row Node="NODE_TECH_AQ_ASTRONOMY" PrereqNode="NODE_TECH_AQ_MATHEMATICS"/>
</ProgressionTreePrereqs>
<ProgressionTreeNodeUnlocks>
<Row ProgressionTreeNodeType="NODE_TECH_AQ_ASTRONOMY"
TargetKind="KIND_MODIFIER"
TargetType="MOD_TECH_ASTRONOMY_PLOT_SCIENCE"
UnlockDepth="1"/>
</ProgressionTreeNodeUnlocks>
</Database>