Skip to content

tutorials Creating a Civic

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

Creating a Civic

This tutorial shows how to add a new civic to Civilization VII's culture tree.

Overview

Civics in Civ VII use the Progression Tree system, similar to technologies. Each civic is a KIND_TREE_NODE that belongs to one of the age-specific civic trees:

Age Civic Tree
Antiquity TREE_CIVICS_AQ_MAIN
Exploration TREE_CIVICS_EX_MAIN
Modern TREE_CIVICS_MO_MAIN

Civics primarily unlock Traditions (policies) and Wonders.

Mod Structure

MyCivicMod/
├── MyCivicMod.modinfo
├── data/
│   ├── civic.xml
│   └── civic-text.xml

Step 1: Create the modinfo

<?xml version="1.0" encoding="utf-8"?>
<Mod id="my-civic-mod" version="1.0.0" xmlns="ModInfo">
    <Properties>
        <Name>My New Civic</Name>
        <Description>Adds a new civic to the Antiquity culture 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/civic.xml</Item>
                </UpdateDatabase>
                <UpdateText>
                    <Item>data/civic-text.xml</Item>
                </UpdateText>
            </Actions>
        </ActionGroup>
    </ActionGroups>
</Mod>

Step 2: Define the Civic

Create data/civic.xml:

<?xml version="1.0" encoding="utf-8"?>
<Database>
    <!-- Register the type -->
    <Types>
        <Row Type="NODE_CIVIC_AQ_MAIN_DIPLOMACY" Kind="KIND_TREE_NODE"/>
    </Types>

    <!-- Optional: Add a quote -->
    <TypeQuotes>
        <Row
            Type="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
            Quote="LOC_CIVIC_DIPLOMACY_QUOTE"
            QuoteAuthor="LOC_CIVIC_DIPLOMACY_QUOTE_AUTHOR"/>
    </TypeQuotes>

    <!-- Define the civic in the progression tree -->
    <ProgressionTreeNodes>
        <Row
            ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
            ProgressionTree="TREE_CIVICS_AQ_MAIN"
            Cost="300"
            Name="LOC_CIVIC_DIPLOMACY_NAME"
            IconString="cult_diplomacy"/>
    </ProgressionTreeNodes>

    <!-- Set prerequisites -->
    <ProgressionTreePrereqs>
        <Row Node="NODE_CIVIC_AQ_MAIN_DIPLOMACY" PrereqNode="NODE_CIVIC_AQ_MAIN_CODE_OF_LAWS"/>
    </ProgressionTreePrereqs>

    <!-- Define what the civic unlocks -->
    <ProgressionTreeNodeUnlocks>
        <!-- Unlock a tradition (policy) -->
        <Row
            ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
            TargetKind="KIND_TRADITION"
            TargetType="TRADITION_AMBASSADORS"
            UnlockDepth="1"/>

        <!-- Unlock a wonder -->
        <Row
            ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
            TargetKind="KIND_CONSTRUCTIBLE"
            TargetType="WONDER_FORUM"
            UnlockDepth="1"/>
    </ProgressionTreeNodeUnlocks>

    <!-- Optional: Set advisory categories -->
    <ProgressionTree_Advisories>
        <Row ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
             AdvisoryClassType="ADVISORY_CLASS_POLITICAL"/>
    </ProgressionTree_Advisories>
</Database>

Step 3: Add Localization

Create data/civic-text.xml:

<?xml version="1.0" encoding="utf-8"?>
<Database>
    <LocalizedText>
        <Row Tag="LOC_CIVIC_DIPLOMACY_NAME" Language="en_US">
            <Text>Diplomacy</Text>
        </Row>
        <Row Tag="LOC_CIVIC_DIPLOMACY_QUOTE" Language="en_US">
            <Text>Diplomacy is the art of telling people to go to hell in such a way that they ask for directions.</Text>
        </Row>
        <Row Tag="LOC_CIVIC_DIPLOMACY_QUOTE_AUTHOR" Language="en_US">
            <Text>Winston Churchill</Text>
        </Row>
    </LocalizedText>
</Database>

Key Properties

ProgressionTreeNodes Columns

Column Description
ProgressionTreeNodeType Primary key (your civic type)
ProgressionTree Which tree (TREE_CIVICS_AQ_MAIN, TREE_CIVICS_EX_MAIN, TREE_CIVICS_MO_MAIN)
Cost Culture cost to research
Name Localization key for name
IconString Icon identifier (use cult_ prefix for civic icons)

Common Civic Unlocks

TargetKind Description Examples
KIND_TRADITION Policies/Traditions TRADITION_SCHOLARS, TRADITION_HONOR
KIND_CONSTRUCTIBLE Wonders and buildings WONDER_ORACLE, BUILDING_ALTAR
KIND_UNIT Units UNIT_MERCHANT, UNIT_ARMY_COMMANDER
KIND_PROJECT City projects PROJECT_CITY_CULTURE_PROJECT
KIND_MODIFIER Direct effects Settlement cap increases, codex bonuses
KIND_DIPLOMATIC_ACTION Diplomacy options DIPLOMACY_ACTION_IMPROVE_TRADE_RELATIONS

Advisory Classes

Set which advisor recommends this civic:

AdvisoryClassType Focus
ADVISORY_CLASS_CULTURE Cultural development
ADVISORY_CLASS_MILITARY Military strength
ADVISORY_CLASS_DEFENSE Defensive capabilities
ADVISORY_CLASS_ECONOMIC Economic growth
ADVISORY_CLASS_POLITICAL Diplomacy and politics

Creating a New Tradition (Policy)

If your civic unlocks a new tradition, you need to define it:

data/tradition.xml:

<?xml version="1.0" encoding="utf-8"?>
<Database>
    <Types>
        <Row Type="TRADITION_AMBASSADORS" Kind="KIND_TRADITION"/>
    </Types>

    <Traditions>
        <Row
            TraditionType="TRADITION_AMBASSADORS"
            Name="LOC_TRADITION_AMBASSADORS_NAME"
            Description="LOC_TRADITION_AMBASSADORS_DESC"
            Icon="ICON_TRADITION_AMBASSADORS"/>
    </Traditions>

    <!-- Link modifier to tradition -->
    <TraditionModifiers>
        <Row TraitType="TRADITION_AMBASSADORS" ModifierId="MOD_AMBASSADORS_INFLUENCE"/>
    </TraditionModifiers>
</Database>

data/tradition-gameeffects.xml:

<?xml version="1.0" encoding="utf-8"?>
<GameEffects xmlns="GameEffects">
    <Modifier id="MOD_AMBASSADORS_INFLUENCE"
              collection="COLLECTION_OWNER"
              effect="EFFECT_PLAYER_ADJUST_YIELD">
        <Argument name="YieldType">YIELD_INFLUENCE</Argument>
        <Argument name="Amount">3</Argument>
    </Modifier>
</GameEffects>

Multiple Prerequisites

Require multiple civics before this one:

<ProgressionTreePrereqs>
    <Row Node="NODE_CIVIC_AQ_MAIN_DIPLOMACY" PrereqNode="NODE_CIVIC_AQ_MAIN_CODE_OF_LAWS"/>
    <Row Node="NODE_CIVIC_AQ_MAIN_DIPLOMACY" PrereqNode="NODE_CIVIC_AQ_MAIN_PUBLIC_LIFE"/>
</ProgressionTreePrereqs>

Research Depths

Like technologies, civics have two depths:

<ProgressionTreeNodeUnlocks>
    <!-- Depth 1: Initial completion -->
    <Row ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
         TargetKind="KIND_TRADITION"
         TargetType="TRADITION_AMBASSADORS"
         UnlockDepth="1"/>

    <!-- Depth 2: Full mastery -->
    <Row ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
         TargetKind="KIND_CONSTRUCTIBLE"
         TargetType="WONDER_FORUM"
         UnlockDepth="2"/>

    <Row ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
         TargetKind="KIND_DIPLOMATIC_ACTION"
         TargetType="DIPLOMACY_ACTION_ALLIANCE"
         UnlockDepth="2"/>
</ProgressionTreeNodeUnlocks>

Civilization-Specific Unlocks

Unlock different content for specific civilizations:

<ProgressionTreeNodeUnlocks>
    <!-- Standard merchant for all -->
    <Row ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
         TargetKind="KIND_UNIT"
         TargetType="UNIT_MERCHANT"
         UnlockDepth="1"/>

    <!-- Special merchant for Rome only -->
    <Row ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
         TargetKind="KIND_UNIT"
         TargetType="UNIT_ROMAN_EMISSARY"
         UnlockDepth="1"
         RequiredTraitType="TRAIT_ROME"/>
</ProgressionTreeNodeUnlocks>

Complete Example

A full working civic mod:

data/civic.xml:

<?xml version="1.0" encoding="utf-8"?>
<Database>
    <Types>
        <Row Type="NODE_CIVIC_AQ_MAIN_DIPLOMACY" Kind="KIND_TREE_NODE"/>
        <Row Type="TRADITION_AMBASSADORS" Kind="KIND_TRADITION"/>
    </Types>

    <TypeQuotes>
        <Row Type="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
             Quote="LOC_CIVIC_DIPLOMACY_QUOTE"
             QuoteAuthor="LOC_CIVIC_DIPLOMACY_QUOTE_AUTHOR"/>
    </TypeQuotes>

    <ProgressionTreeNodes>
        <Row ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
             ProgressionTree="TREE_CIVICS_AQ_MAIN"
             Cost="350"
             Name="LOC_CIVIC_DIPLOMACY_NAME"
             IconString="cult_diplomacy"/>
    </ProgressionTreeNodes>

    <ProgressionTreePrereqs>
        <Row Node="NODE_CIVIC_AQ_MAIN_DIPLOMACY" PrereqNode="NODE_CIVIC_AQ_MAIN_CODE_OF_LAWS"/>
    </ProgressionTreePrereqs>

    <ProgressionTreeNodeUnlocks>
        <Row ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
             TargetKind="KIND_TRADITION"
             TargetType="TRADITION_AMBASSADORS"
             UnlockDepth="1"/>
    </ProgressionTreeNodeUnlocks>

    <ProgressionTree_Advisories>
        <Row ProgressionTreeNodeType="NODE_CIVIC_AQ_MAIN_DIPLOMACY"
             AdvisoryClassType="ADVISORY_CLASS_POLITICAL"/>
    </ProgressionTree_Advisories>

    <!-- Define the tradition -->
    <Traditions>
        <Row TraditionType="TRADITION_AMBASSADORS"
             Name="LOC_TRADITION_AMBASSADORS_NAME"
             Description="LOC_TRADITION_AMBASSADORS_DESC"/>
    </Traditions>

    <TraditionModifiers>
        <Row TraitType="TRADITION_AMBASSADORS" ModifierId="MOD_AMBASSADORS_INFLUENCE"/>
    </TraditionModifiers>
</Database>

data/civic-gameeffects.xml:

<?xml version="1.0" encoding="utf-8"?>
<GameEffects xmlns="GameEffects">
    <Modifier id="MOD_AMBASSADORS_INFLUENCE"
              collection="COLLECTION_OWNER"
              effect="EFFECT_PLAYER_ADJUST_YIELD">
        <Argument name="YieldType">YIELD_INFLUENCE</Argument>
        <Argument name="Amount">3</Argument>
    </Modifier>
</GameEffects>

data/civic-text.xml:

<?xml version="1.0" encoding="utf-8"?>
<Database>
    <LocalizedText>
        <Row Tag="LOC_CIVIC_DIPLOMACY_NAME" Language="en_US">
            <Text>Diplomacy</Text>
        </Row>
        <Row Tag="LOC_CIVIC_DIPLOMACY_QUOTE" Language="en_US">
            <Text>Diplomacy is the art of saying "Nice doggie" until you can find a rock.</Text>
        </Row>
        <Row Tag="LOC_CIVIC_DIPLOMACY_QUOTE_AUTHOR" Language="en_US">
            <Text>Will Rogers</Text>
        </Row>
        <Row Tag="LOC_TRADITION_AMBASSADORS_NAME" Language="en_US">
            <Text>Ambassadors</Text>
        </Row>
        <Row Tag="LOC_TRADITION_AMBASSADORS_DESC" Language="en_US">
            <Text>+3 [icon:YIELD_INFLUENCE] Influence per turn.</Text>
        </Row>
    </LocalizedText>
</Database>

Existing Civic Nodes (Antiquity)

Reference these as prerequisites:

Civic Type
Chiefdom NODE_CIVIC_AQ_MAIN_CHIEFDOM
Mysticism NODE_CIVIC_AQ_MAIN_MYSTICISM
Discipline NODE_CIVIC_AQ_MAIN_DISCIPLINE
Public Life NODE_CIVIC_AQ_MAIN_PUBLIC_LIFE
Code of Laws NODE_CIVIC_AQ_MAIN_CODE_OF_LAWS
Tactics NODE_CIVIC_AQ_MAIN_TACTICS
Entertainment NODE_CIVIC_AQ_MAIN_ENTERTAINMENT
Citizenship NODE_CIVIC_AQ_MAIN_CITIZENSHIP
Organized Military NODE_CIVIC_AQ_MAIN_ORG_MILITARY
Literacy NODE_CIVIC_AQ_MAIN_LITERACY
Skilled Trades NODE_CIVIC_AQ_MAIN_SKILLED_TRADES
Philosophy NODE_CIVIC_AQ_MAIN_PHILOSOPHY
Commerce NODE_CIVIC_AQ_MAIN_COMMERCE

See Also

Clone this wiki locally