Skip to content

tutorials Creating a Technology

ghost-ng edited this page Jan 29, 2026 · 1 revision

Creating a Technology

This tutorial shows how to add a new technology to Civilization VII's tech tree.

Overview

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

Mod Structure

MyTechMod/
├── MyTechMod.modinfo
├── data/
│   ├── technology.xml
│   └── technology-text.xml

Step 1: Create the modinfo

<?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>

Step 2: Define the Technology

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>

Step 3: Add Localization

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>

Key Properties

ProgressionTreeNodes Columns

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)

ProgressionTreeNodeUnlocks Columns

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

Common TargetKind Values

TargetKind Description
KIND_CONSTRUCTIBLE Buildings, improvements, wonders
KIND_UNIT Units
KIND_MODIFIER Game effects/modifiers
KIND_PROJECT City projects
KIND_DIPLOMATIC_ACTION Diplomatic actions

Adding a Tech Bonus (Optional)

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>

Multiple Prerequisites

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.

Civilization-Specific Unlocks

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>

Research Depths

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>

Adding an Icon

If you want a custom icon:

  1. Create a 50x50 and 38x38 version of your icon
  2. Add icon definition:
<IconDefinitions>
    <Row>
        <ID>tech_astronomy</ID>
        <Path>fs://game/my-tech-mod/icons/tech_astronomy.png</Path>
    </Row>
</IconDefinitions>
  1. Add <UpdateIcons> action to modinfo

Complete Example

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>

See Also

Clone this wiki locally