-
Notifications
You must be signed in to change notification settings - Fork 0
tutorials Creating a Civilization
ghost-ng edited this page Jan 28, 2026
·
1 revision
This tutorial walks through creating a complete playable civilization for Civilization VII, including unique abilities, a leader, starting bias, city names, and all required database entries.
- Registering civilization and leader types
- Creating unique civilization abilities with modifiers
- Defining leader traits and agendas
- Setting up starting bias for terrain preferences
- Adding city names and localization
- Linking everything together
We'll create Carthage as a new Antiquity Age civilization focused on trade and naval power, with Hannibal as the leader.
my-carthage-civ/
├── data/
│ ├── civilizations.xml
│ ├── leaders.xml
│ ├── game-effects.xml
│ └── city-names.xml
├── text/
│ └── text.xml
└── my-carthage-civ.modinfo
my-carthage-civ.modinfo
<?xml version="1.0" encoding="utf-8"?>
<Mod id="my-carthage-civ" version="1" xmlns="ModInfo">
<Properties>
<Name>Carthage Civilization</Name>
<Description>Adds Carthage as a playable civilization led by Hannibal.</Description>
<Authors>Your Name</Authors>
<AffectsSavedGames>1</AffectsSavedGames>
</Properties>
<Dependencies>
</Dependencies>
<ActionCriteria>
<Criteria id="antiquity-age">
<AgeInUse>AGE_ANTIQUITY</AgeInUse>
</Criteria>
<Criteria id="always">
<AlwaysMet></AlwaysMet>
</Criteria>
</ActionCriteria>
<ActionGroups>
<!-- Shell scope for leader/civ selection screens -->
<ActionGroup id="shell-content" scope="shell" criteria="always">
<Actions>
<UpdateDatabase>
<Item>data/civilizations.xml</Item>
<Item>data/leaders.xml</Item>
</UpdateDatabase>
<UpdateText>
<Item>text/text.xml</Item>
</UpdateText>
</Actions>
</ActionGroup>
<!-- Game scope for gameplay data -->
<ActionGroup id="antiquity-game" scope="game" criteria="antiquity-age">
<Actions>
<UpdateDatabase>
<Item>data/civilizations.xml</Item>
<Item>data/leaders.xml</Item>
<Item>data/game-effects.xml</Item>
<Item>data/city-names.xml</Item>
</UpdateDatabase>
<UpdateText>
<Item>text/text.xml</Item>
</UpdateText>
</Actions>
</ActionGroup>
</ActionGroups>
</Mod>- Shell scope: Needed for the civilization/leader to appear in game setup menus
- Game scope: Needed for actual gameplay mechanics
data/civilizations.xml
<?xml version="1.0" encoding="utf-8"?>
<Database>
<!-- 1. Register types -->
<Types>
<Row Type="CIVILIZATION_CARTHAGE" Kind="KIND_CIVILIZATION"/>
<Row Type="TRAIT_CARTHAGE" Kind="KIND_TRAIT"/>
<Row Type="TRAIT_CARTHAGE_ABILITY" Kind="KIND_TRAIT"/>
</Types>
<!-- 2. Define the civilization -->
<Civilizations>
<Row
CivilizationType="CIVILIZATION_CARTHAGE"
Name="LOC_CIVILIZATION_CARTHAGE_NAME"
FullName="LOC_CIVILIZATION_CARTHAGE_FULLNAME"
Description="LOC_CIVILIZATION_CARTHAGE_DESCRIPTION"
Adjective="LOC_CIVILIZATION_CARTHAGE_ADJECTIVE"
StartingCivilizationLevelType="CIVILIZATION_LEVEL_FULL_CIV"
CapitalName="LOC_CITY_NAME_CARTHAGE_CAPITAL"
RandomCityNameDepth="15"
/>
</Civilizations>
<!-- 3. Define traits -->
<Traits>
<!-- Internal identifier trait -->
<Row
TraitType="TRAIT_CARTHAGE"
Name="LOC_TRAIT_CARTHAGE_NAME"
Description="LOC_TRAIT_CARTHAGE_DESCRIPTION"
InternalOnly="true"
/>
<!-- Unique ability trait (visible to player) -->
<Row
TraitType="TRAIT_CARTHAGE_ABILITY"
Name="LOC_TRAIT_CARTHAGE_ABILITY_NAME"
Description="LOC_TRAIT_CARTHAGE_ABILITY_DESCRIPTION"
InternalOnly="false"
/>
</Traits>
<!-- 4. Link traits to civilization -->
<CivilizationTraits>
<!-- Age trait - required for Antiquity civs -->
<Row CivilizationType="CIVILIZATION_CARTHAGE" TraitType="TRAIT_ANTIQUITY_CIV"/>
<!-- Internal identifier -->
<Row CivilizationType="CIVILIZATION_CARTHAGE" TraitType="TRAIT_CARTHAGE"/>
<!-- Unique ability -->
<Row CivilizationType="CIVILIZATION_CARTHAGE" TraitType="TRAIT_CARTHAGE_ABILITY"/>
<!-- Attribute bonuses (pick 2) -->
<Row CivilizationType="CIVILIZATION_CARTHAGE" TraitType="TRAIT_ATTRIBUTE_ECONOMIC"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" TraitType="TRAIT_ATTRIBUTE_MILITARISTIC"/>
</CivilizationTraits>
<!-- 5. Link ability trait to modifiers -->
<TraitModifiers>
<Row TraitType="TRAIT_CARTHAGE_ABILITY" ModifierId="MOD_CARTHAGE_TRADE_GOLD"/>
<Row TraitType="TRAIT_CARTHAGE_ABILITY" ModifierId="MOD_CARTHAGE_NAVAL_PRODUCTION"/>
</TraitModifiers>
<!-- 6. Starting bias (terrain preferences) -->
<StartBiases>
<Row CivilizationType="CIVILIZATION_CARTHAGE" TerrainType="TERRAIN_COAST" Tier="1"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" FeatureType="FEATURE_NAVIGABLE_RIVER" Tier="2"/>
</StartBiases>
<!-- 7. Favored wonders -->
<CivilizationFavoredWonders>
<Row CivilizationType="CIVILIZATION_CARTHAGE"
FavoredWonderType="WONDER_COLOSSUS"
FavoredWonderName="LOC_WONDER_COLOSSUS_NAME"/>
</CivilizationFavoredWonders>
</Database>| Trait Type | Purpose |
|---|---|
TRAIT_ANTIQUITY_CIV |
Shared by all Antiquity civs, provides base mechanics |
TRAIT_[CIV] |
Internal identifier for the civ |
TRAIT_[CIV]_ABILITY |
The unique ability shown in UI |
TRAIT_ATTRIBUTE_* |
Attribute bonuses (pick 2 for balance) |
| Attribute | Focus |
|---|---|
TRAIT_ATTRIBUTE_CULTURAL |
Culture, Great Works |
TRAIT_ATTRIBUTE_ECONOMIC |
Gold, Trade |
TRAIT_ATTRIBUTE_EXPANSIONIST |
Settlers, Growth |
TRAIT_ATTRIBUTE_MILITARISTIC |
Units, Combat |
TRAIT_ATTRIBUTE_POLITICAL |
Diplomacy, Influence |
TRAIT_ATTRIBUTE_SCIENTIFIC |
Science, Research |
| Tier | Strength |
|---|---|
| 1 | Strong preference |
| 2 | Moderate preference |
| 3 | Slight preference |
| 4 | Weak preference |
| 5 | Very weak preference |
data/leaders.xml
<?xml version="1.0" encoding="utf-8"?>
<Database>
<!-- 1. Register types -->
<Types>
<Row Type="LEADER_HANNIBAL" Kind="KIND_LEADER"/>
<Row Type="TRAIT_HANNIBAL_ABILITY" Kind="KIND_TRAIT"/>
<Row Type="AGENDA_HANNIBAL" Kind="KIND_AGENDA"/>
</Types>
<!-- 2. Define the leader -->
<Leaders>
<Row
LeaderType="LEADER_HANNIBAL"
Name="LOC_LEADER_HANNIBAL_NAME"
InheritFrom="LEADER_DEFAULT"
/>
</Leaders>
<!-- 3. Define leader trait -->
<Traits>
<Row
TraitType="TRAIT_HANNIBAL_ABILITY"
Name="LOC_TRAIT_HANNIBAL_ABILITY_NAME"
Description="LOC_TRAIT_HANNIBAL_ABILITY_DESCRIPTION"
InternalOnly="false"
/>
</Traits>
<!-- 4. Link trait to leader -->
<LeaderTraits>
<Row LeaderType="LEADER_HANNIBAL" TraitType="TRAIT_HANNIBAL_ABILITY"/>
</LeaderTraits>
<!-- 5. Link trait to modifiers -->
<TraitModifiers>
<Row TraitType="TRAIT_HANNIBAL_ABILITY" ModifierId="MOD_HANNIBAL_COMBAT_MOUNTAINS"/>
<Row TraitType="TRAIT_HANNIBAL_ABILITY" ModifierId="MOD_HANNIBAL_UNIT_EXPERIENCE"/>
</TraitModifiers>
<!-- 6. Link leader to civilization -->
<CivilizationLeaders>
<Row CivilizationType="CIVILIZATION_CARTHAGE" LeaderType="LEADER_HANNIBAL"/>
</CivilizationLeaders>
<!-- 7. Set civ priorities for AI -->
<LeaderCivPriorities>
<Row Leader="LEADER_HANNIBAL" Civilization="CIVILIZATION_CARTHAGE" Priority="4"/>
<Row Leader="LEADER_HANNIBAL" Civilization="CIVILIZATION_PERSIA" Priority="2"/>
<Row Leader="LEADER_HANNIBAL" Civilization="CIVILIZATION_ROME" Priority="1"/>
</LeaderCivPriorities>
<!-- 8. Define AI agenda -->
<Agendas>
<Row
AgendaType="AGENDA_HANNIBAL"
Name="LOC_AGENDA_HANNIBAL_NAME"
Description="LOC_AGENDA_HANNIBAL_DESCRIPTION"
/>
</Agendas>
<!-- 9. Link agenda to leader -->
<LeaderAgendas>
<Row LeaderType="LEADER_HANNIBAL" AgendaType="AGENDA_HANNIBAL"/>
</LeaderAgendas>
</Database>data/game-effects.xml
<?xml version="1.0" encoding="utf-8"?>
<GameEffects xmlns="GameEffects">
<!-- ========================================
CIVILIZATION ABILITY: Masters of Trade
======================================== -->
<!-- +2 Gold from Trade Routes -->
<Modifier id="MOD_CARTHAGE_TRADE_GOLD"
collection="COLLECTION_PLAYER_TRADE_ROUTES"
effect="EFFECT_TRADE_ROUTE_ADJUST_YIELD">
<Argument name="YieldType">YIELD_GOLD</Argument>
<Argument name="Amount">2</Argument>
<String context="Description">LOC_TRAIT_CARTHAGE_ABILITY_DESCRIPTION</String>
</Modifier>
<!-- +25% Production towards Naval units -->
<Modifier id="MOD_CARTHAGE_NAVAL_PRODUCTION"
collection="COLLECTION_PLAYER_CITIES"
effect="EFFECT_CITY_ADJUST_UNIT_TAG_ERA_PRODUCTION">
<Argument name="UnitTag">UNIT_CLASS_NAVAL</Argument>
<Argument name="Amount">25</Argument>
</Modifier>
<!-- ========================================
LEADER ABILITY: Crossing the Alps
======================================== -->
<!-- +5 Combat Strength for units in hills/mountains -->
<Modifier id="MOD_HANNIBAL_COMBAT_MOUNTAINS"
collection="COLLECTION_PLAYER_UNITS"
effect="EFFECT_ADJUST_UNIT_COMBAT_STRENGTH">
<SubjectRequirements type="REQUIREMENTSET_TEST_ANY">
<Requirement type="REQUIREMENT_PLOT_TERRAIN_TYPE_MATCHES">
<Argument name="TerrainType">TERRAIN_HILL</Argument>
</Requirement>
<Requirement type="REQUIREMENT_PLOT_FEATURE_TYPE_MATCHES">
<Argument name="FeatureType">FEATURE_MOUNTAIN_PASSABLE</Argument>
</Requirement>
</SubjectRequirements>
<Argument name="Amount">5</Argument>
<String context="Description">LOC_TRAIT_HANNIBAL_ABILITY_DESCRIPTION</String>
</Modifier>
<!-- +25% Experience gain for military units -->
<Modifier id="MOD_HANNIBAL_UNIT_EXPERIENCE"
collection="COLLECTION_PLAYER_UNITS"
effect="EFFECT_ADJUST_UNIT_EXPERIENCE_MODIFIER">
<SubjectRequirements type="REQUIREMENTSET_TEST_ALL">
<Requirement type="REQUIREMENT_UNIT_TAG_MATCHES">
<Argument name="Tag">UNIT_CLASS_COMBAT</Argument>
</Requirement>
</SubjectRequirements>
<Argument name="Amount">25</Argument>
</Modifier>
</GameEffects>| Effect | Description |
|---|---|
EFFECT_CITY_ADJUST_YIELD |
Flat yield bonus to cities |
EFFECT_PLOT_ADJUST_YIELD |
Bonus to specific plots |
EFFECT_TRADE_ROUTE_ADJUST_YIELD |
Trade route bonuses |
EFFECT_ADJUST_UNIT_COMBAT_STRENGTH |
Combat bonuses |
EFFECT_CITY_ADJUST_UNIT_TAG_ERA_PRODUCTION |
Production bonus for unit types |
EFFECT_PLAYER_ADJUST_CONSTRUCTIBLE_YIELD |
Building/wonder bonuses |
data/city-names.xml
<?xml version="1.0" encoding="utf-8"?>
<Database>
<CivilizationCityNames>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_1" SortIndex="1"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_2" SortIndex="2"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_3" SortIndex="3"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_4" SortIndex="4"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_5" SortIndex="5"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_6" SortIndex="6"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_7" SortIndex="7"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_8" SortIndex="8"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_9" SortIndex="9"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_10" SortIndex="10"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_11" SortIndex="11"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_12" SortIndex="12"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_13" SortIndex="13"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_14" SortIndex="14"/>
<Row CivilizationType="CIVILIZATION_CARTHAGE" CityName="LOC_CITY_NAME_CARTHAGE_15" SortIndex="15"/>
</CivilizationCityNames>
</Database>text/text.xml
<?xml version="1.0" encoding="utf-8"?>
<Database>
<LocalizedText>
<!-- Civilization -->
<Row Tag="LOC_CIVILIZATION_CARTHAGE_NAME" Language="en_US">
<Text>Carthage</Text>
</Row>
<Row Tag="LOC_CIVILIZATION_CARTHAGE_FULLNAME" Language="en_US">
<Text>Carthaginian Empire</Text>
</Row>
<Row Tag="LOC_CIVILIZATION_CARTHAGE_DESCRIPTION" Language="en_US">
<Text>A great maritime trading empire of the ancient Mediterranean.</Text>
</Row>
<Row Tag="LOC_CIVILIZATION_CARTHAGE_ADJECTIVE" Language="en_US">
<Text>Carthaginian</Text>
</Row>
<!-- Civilization Traits -->
<Row Tag="LOC_TRAIT_CARTHAGE_NAME" Language="en_US">
<Text>Carthage</Text>
</Row>
<Row Tag="LOC_TRAIT_CARTHAGE_DESCRIPTION" Language="en_US">
<Text>Carthaginian civilization</Text>
</Row>
<Row Tag="LOC_TRAIT_CARTHAGE_ABILITY_NAME" Language="en_US">
<Text>Masters of Trade</Text>
</Row>
<Row Tag="LOC_TRAIT_CARTHAGE_ABILITY_DESCRIPTION" Language="en_US">
<Text>+2[icon:YIELD_GOLD] Gold from Trade Routes. +25% [icon:YIELD_PRODUCTION] Production towards Naval units.</Text>
</Row>
<!-- Leader -->
<Row Tag="LOC_LEADER_HANNIBAL_NAME" Language="en_US">
<Text>Hannibal</Text>
</Row>
<Row Tag="LOC_TRAIT_HANNIBAL_ABILITY_NAME" Language="en_US">
<Text>Crossing the Alps</Text>
</Row>
<Row Tag="LOC_TRAIT_HANNIBAL_ABILITY_DESCRIPTION" Language="en_US">
<Text>+5[icon:STAT_COMBAT] Combat Strength for units fighting in Hills or Mountains. Military units earn experience 25% faster.</Text>
</Row>
<!-- Agenda -->
<Row Tag="LOC_AGENDA_HANNIBAL_NAME" Language="en_US">
<Text>Eternal Rival</Text>
</Row>
<Row Tag="LOC_AGENDA_HANNIBAL_DESCRIPTION" Language="en_US">
<Text>Respects civilizations with strong militaries. Dislikes those who rely solely on diplomacy.</Text>
</Row>
<!-- Capital -->
<Row Tag="LOC_CITY_NAME_CARTHAGE_CAPITAL" Language="en_US">
<Text>Carthage</Text>
</Row>
<!-- City Names -->
<Row Tag="LOC_CITY_NAME_CARTHAGE_1" Language="en_US"><Text>Carthage</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_2" Language="en_US"><Text>Utica</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_3" Language="en_US"><Text>Hippo Regius</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_4" Language="en_US"><Text>Gades</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_5" Language="en_US"><Text>Saguntum</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_6" Language="en_US"><Text>Carthago Nova</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_7" Language="en_US"><Text>Panormus</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_8" Language="en_US"><Text>Lilybaeum</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_9" Language="en_US"><Text>Hadrumetum</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_10" Language="en_US"><Text>Leptis Magna</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_11" Language="en_US"><Text>Thapsus</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_12" Language="en_US"><Text>Malaca</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_13" Language="en_US"><Text>Tingis</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_14" Language="en_US"><Text>Cirta</Text></Row>
<Row Tag="LOC_CITY_NAME_CARTHAGE_15" Language="en_US"><Text>Zama</Text></Row>
</LocalizedText>
</Database>-
Copy your mod folder to:
-
Windows:
%LOCALAPPDATA%\Firaxis Games\Sid Meier's Civilization VII\Mods\
-
Windows:
-
Launch the game and enable the mod
-
In game setup, you should see Hannibal as an available leader and Carthage as a civilization
-
Start a new game and verify:
- Starting position near coast
- Trade route gold bonus working
- Combat bonuses on hills
Add to your civilizations.xml:
<Types>
<Row Type="UNIT_SACRED_BAND" Kind="KIND_UNIT"/>
</Types>
<Units>
<Row UnitType="UNIT_SACRED_BAND" ... />
</Units>
<!-- Make it unique to Carthage -->
<CivilizationUniqueUnits>
<Row CivilizationType="CIVILIZATION_CARTHAGE"
UnitType="UNIT_SACRED_BAND"
ReplacesUnitType="UNIT_WARRIOR"/>
</CivilizationUniqueUnits><Types>
<Row Type="BUILDING_COTHON" Kind="KIND_BUILDING"/>
</Types>
<Buildings>
<Row BuildingType="BUILDING_COTHON" ... />
</Buildings>
<CivilizationUniqueBuildings>
<Row CivilizationType="CIVILIZATION_CARTHAGE"
BuildingType="BUILDING_COTHON"
ReplacesBuildingType="BUILDING_HARBOR"/>
</CivilizationUniqueBuildings>| Issue | Solution |
|---|---|
| Civ not in selection | Check shell scope ActionGroup loads data |
| Ability not working | Verify ModifierId links in TraitModifiers |
| Wrong starting location | Check StartBiases tier values |
| Leader not linked | Check CivilizationLeaders table |
| Text not showing | Verify LOC_ tags match between XML files |
- Types (civilization, traits, leader, agenda)
- Civilizations
- Traits
- CivilizationTraits
- TraitModifiers
- StartBiases
- Leaders
- LeaderTraits
- CivilizationLeaders
- LeaderCivPriorities
- Agendas
- LeaderAgendas
- CivilizationCityNames
- LocalizedText