-
Notifications
You must be signed in to change notification settings - Fork 0
units Promotions
This document covers the unit promotion system in Civilization VII, including promotion classes, disciplines, commendations, and how to create custom promotions.
Civ VII uses a hierarchical promotion system based on:
- Promotion Classes - Categories of units (Land, Naval, Air, Aerodrome, Carrier)
- Disciplines - Specialization paths within each class (e.g., Bastion, Assault, Logistics)
- Promotions - Individual upgrades within disciplines, forming prerequisite trees
- Commendations - Special rewards earned when completing a discipline
| Table | Purpose |
|---|---|
Types |
Register promotions and disciplines as kinds |
UnitPromotionClasses |
Define promotion class categories |
UnitPromotionDisciplines |
Define discipline specializations |
UnitPromotionClassSets |
Link classes to their available disciplines |
UnitPromotionDisciplineDetails |
Define promotions within disciplines with prerequisites |
UnitPromotions |
Define promotion details (name, description, commendation flag) |
UnitPromotionModifiers |
Link promotions to their gameplay effects |
UnitAbilities |
Define abilities granted by promotions |
UnitAbilityModifiers |
Link abilities to their modifiers |
The promotion system uses three type kinds:
<Types>
<!-- Promotion Class (Land, Naval, Air) -->
<Row Type="PROMOTIONCLASS_MY_CLASS" Kind="KIND_PROMOTION_CLASS"/>
<!-- Discipline (specialization within a class) -->
<Row Type="DISCIPLINE_MY_DISCIPLINE" Kind="KIND_PROMOITON_DISCIPLINE_CLASS"/>
<!-- Individual Promotion -->
<Row Type="PROMOTION_MY_PROMOTION" Kind="KIND_PROMOTION"/>
</Types>Note: KIND_PROMOITON_DISCIPLINE_CLASS has a typo in the game files (missing 'I' in PROMOTION).
Promotion classes define what category of commander units can use a set of disciplines.
| Class | Description |
|---|---|
PROMOTIONCLASS_LAND |
Army commanders (land units) |
PROMOTIONCLASS_NAVAL |
Fleet commanders (naval units) |
PROMOTIONCLASS_AIR |
Squadron commanders (aircraft) |
PROMOTIONCLASS_AERODROME |
Aerodrome-based aircraft |
PROMOTIONCLASS_CARRIER |
Carrier-based aircraft |
<UnitPromotionClasses>
<Row PromotionClassType="PROMOTIONCLASS_MY_CLASS"/>
</UnitPromotionClasses>| Column | Type | Description |
|---|---|---|
PromotionClassType |
TEXT | Unique identifier for the class |
Disciplines are specialization paths within a promotion class. Each discipline contains a tree of promotions.
| Discipline | Focus |
|---|---|
DISCIPLINE_ARMY_BASTION |
Defensive combat |
DISCIPLINE_ARMY_ASSAULT |
Offensive combat |
DISCIPLINE_ARMY_LOGISTICS |
Supply and healing |
DISCIPLINE_ARMY_MANEUVER |
Movement and mobility |
DISCIPLINE_ARMY_LEADERSHIP |
Unit buffs and support |
| Discipline | Focus |
|---|---|
DISCIPLINE_FLEET_BOMBARDMENT |
Ranged naval attacks |
DISCIPLINE_FLEET_ENGAGEMENT |
Direct naval combat |
DISCIPLINE_FLEET_LOGISTICS |
Supply and fleet support |
DISCIPLINE_FLEET_MANEUVER |
Naval movement |
DISCIPLINE_FLEET_LEADERSHIP |
Fleet buffs |
| Discipline | Focus |
|---|---|
DISCIPLINE_SQUADRON_DOGFIGHTING |
Air-to-air combat |
DISCIPLINE_SQUADRON_RAIDS |
Ground attack missions |
DISCIPLINE_SQUADRON_LOGISTICS |
Air support operations |
DISCIPLINE_SQUADRON_AIRLIFT_OPERATIONS |
Transport operations |
DISCIPLINE_AERODROME_LOGISTICS |
Aerodrome support |
DISCIPLINE_CARRIER_OPERATIONS |
Carrier aircraft |
DISCIPLINE_CARRIER_LOGISTICS |
Carrier support |
Each commander type has special commendation disciplines for rewards:
| Discipline | Commander Type |
|---|---|
DISCIPLINE_ARMY_COMMENDATION_VALOR |
Army |
DISCIPLINE_ARMY_COMMENDATION_SERVICE |
Army |
DISCIPLINE_ARMY_COMMENDATION_ORDER |
Army |
DISCIPLINE_ARMY_COMMENDATION_DUTY |
Army |
DISCIPLINE_ARMY_COMMENDATION_MERIT |
Army |
DISCIPLINE_FLEET_COMMENDATION_* |
Fleet |
DISCIPLINE_SQUADRON_COMMENDATION_* |
Squadron |
<UnitPromotionDisciplines>
<Row UnitPromotionDisciplineType="DISCIPLINE_MY_DISCIPLINE"
Name="LOC_DISCIPLINE_MY_DISCIPLINE_NAME"
Description="LOC_DISCIPLINE_MY_DISCIPLINE_DESCRIPTION"/>
</UnitPromotionDisciplines>| Column | Type | Description |
|---|---|---|
UnitPromotionDisciplineType |
TEXT | Unique discipline identifier |
Name |
TEXT | Localization key for name |
Description |
TEXT | Localization key for description |
<UnitPromotionClassSets>
<Row UnitPromotionClassType="PROMOTIONCLASS_LAND"
UnitPromotionDisciplineType="DISCIPLINE_MY_DISCIPLINE"/>
</UnitPromotionClassSets>The UnitPromotionDisciplineDetails table defines which promotions belong to a discipline and their prerequisites:
<UnitPromotionDisciplineDetails>
<!-- Root promotion (no prerequisite) -->
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_BASTION"
UnitPromotionType="PROMOTION_ARMY_STEADFAST"/>
<!-- Second tier (requires first) -->
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_BASTION"
UnitPromotionType="PROMOTION_ARMY_BULWARK"
PrereqUnitPromotion="PROMOTION_ARMY_STEADFAST"/>
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_BASTION"
UnitPromotionType="PROMOTION_ARMY_HOLD_THE_LINE"
PrereqUnitPromotion="PROMOTION_ARMY_STEADFAST"/>
<!-- Third tier with multiple paths (grants commendation) -->
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_BASTION"
UnitPromotionType="PROMOTION_ARMY_GARRISON"
PrereqUnitPromotion="PROMOTION_ARMY_BULWARK"
GrantsCommendation="true"/>
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_BASTION"
UnitPromotionType="PROMOTION_ARMY_GARRISON"
PrereqUnitPromotion="PROMOTION_ARMY_HOLD_THE_LINE"
GrantsCommendation="true"/>
</UnitPromotionDisciplineDetails>| Column | Type | Description |
|---|---|---|
UnitPromotionDisciplineType |
TEXT | The discipline this belongs to |
UnitPromotionType |
TEXT | The promotion being added |
PrereqUnitPromotion |
TEXT | Required promotion (optional for root) |
GrantsCommendation |
BOOLEAN | Whether earning this grants a commendation |
Most disciplines follow this pattern:
[Root Promotion]
|
+------+------+
| |
[Tier 2A] [Tier 2B]
| |
+------+------+
|
[Final Promotion]
(Commendation)
The final promotion typically has two prerequisite paths (can reach it via either Tier 2A or 2B) and grants a commendation.
<UnitPromotions>
<Row UnitPromotionType="PROMOTION_MY_PROMOTION"
Name="LOC_PROMOTION_MY_PROMOTION_NAME"
Description="LOC_PROMOTION_MY_PROMOTION_DESCRIPTION"/>
<!-- Commendation promotion -->
<Row UnitPromotionType="PROMOTION_COMMENDATION_MY_COMMENDATION"
Name="LOC_COMMENDATION_MY_NAME"
Description="LOC_COMMENDATION_MY_DESCRIPTION"
Commendation="true"/>
</UnitPromotions>| Column | Type | Description |
|---|---|---|
UnitPromotionType |
TEXT | Unique promotion identifier |
Name |
TEXT | Localization key for name |
Description |
TEXT | Localization key for description |
Commendation |
BOOLEAN | Whether this is a commendation (special reward) |
<UnitPromotionModifiers>
<Row UnitPromotionType="PROMOTION_MY_PROMOTION" ModifierId="MOD_MY_PROMOTION_EFFECT"/>
<!-- A promotion can have multiple modifiers -->
<Row UnitPromotionType="PROMOTION_MY_PROMOTION" ModifierId="MOD_MY_PROMOTION_EFFECT_2"/>
</UnitPromotionModifiers><GameEffects xmlns="GameEffects">
<!-- Simple strength modifier -->
<Modifier id="MOD_MY_PROMOTION_STRENGTH"
collection="COLLECTION_UNIT_COMBAT"
effect="EFFECT_ADJUST_UNIT_COMBAT_STRENGTH_MODIFIER">
<Argument name="Amount">5</Argument>
</Modifier>
<!-- Grant ability -->
<Modifier id="MOD_MY_PROMOTION_ABILITY"
collection="COLLECTION_OWNER"
effect="EFFECT_UNIT_ADJUST_ABILITY">
<Argument name="AbilityType">ABILITY_MY_ABILITY</Argument>
<Argument name="Amount">1</Argument>
</Modifier>
<!-- Movement bonus -->
<Modifier id="MOD_MY_PROMOTION_MOVEMENT"
collection="COLLECTION_OWNER"
effect="EFFECT_ADJUST_UNIT_MOVEMENT">
<Argument name="Amount">1</Argument>
</Modifier>
</GameEffects>Many promotions grant abilities that have their own conditional effects.
<UnitAbilities>
<Row UnitAbilityType="ABILITY_MY_ABILITY"
Name="LOC_ABILITY_MY_ABILITY_NAME"
Description="LOC_ABILITY_MY_ABILITY_DESCRIPTION"
Inactive="true"
Permanent="false"/>
</UnitAbilities>| Column | Type | Description |
|---|---|---|
UnitAbilityType |
TEXT | Unique ability identifier |
Name |
TEXT | Localization key for name |
Description |
TEXT | Localization key for description |
Inactive |
BOOLEAN | Start as inactive (activated by promotion) |
Permanent |
BOOLEAN | Whether ability persists permanently |
ShareWithChildren |
BOOLEAN | For air units, share ability with child aircraft |
<UnitAbilityModifiers>
<Row UnitAbilityType="ABILITY_MY_ABILITY" ModifierId="MOD_ABILITY_MY_EFFECT"/>
</UnitAbilityModifiers>Commendations are special promotions earned when a unit completes a discipline (reaches the final promotion marked with GrantsCommendation="true").
| Commendation | Effect |
|---|---|
PROMOTION_COMMENDATION_ARMY_VALOR |
Combat strength bonus |
PROMOTION_COMMENDATION_ARMY_DUTY |
Attack damage bonus |
PROMOTION_COMMENDATION_ARMY_SERVICE |
Healing bonus |
PROMOTION_COMMENDATION_ARMY_MERIT |
Experience gain bonus |
PROMOTION_COMMENDATION_ARMY_ORDER |
Support bonus |
| Commendation | Effect |
|---|---|
PROMOTION_COMMENDATION_FLEET_VALOR |
Combat strength bonus |
PROMOTION_COMMENDATION_FLEET_DUTY |
Attack damage bonus |
PROMOTION_COMMENDATION_FLEET_SERVICE |
Healing bonus |
PROMOTION_COMMENDATION_FLEET_MERIT |
Experience gain bonus |
PROMOTION_COMMENDATION_FLEET_ORDER |
Support bonus |
| Commendation | Effect |
|---|---|
PROMOTION_COMMENDATION_SQUADRON_ACHIEVEMENT |
Combat bonus |
PROMOTION_COMMENDATION_SQUADRON_SERVICE |
Support bonus |
PROMOTION_COMMENDATION_SQUADRON_ORDER |
Coordination bonus |
<?xml version="1.0" encoding="utf-8"?>
<Database>
<Types>
<!-- Discipline type -->
<Row Type="DISCIPLINE_ARMY_SIEGE" Kind="KIND_PROMOITON_DISCIPLINE_CLASS"/>
<!-- Promotion types -->
<Row Type="PROMOTION_ARMY_SIEGE_BOMBARDIER" Kind="KIND_PROMOTION"/>
<Row Type="PROMOTION_ARMY_SIEGE_SAPPERS" Kind="KIND_PROMOTION"/>
<Row Type="PROMOTION_ARMY_SIEGE_BREACH" Kind="KIND_PROMOTION"/>
<Row Type="PROMOTION_ARMY_SIEGE_DEVASTATION" Kind="KIND_PROMOTION"/>
<!-- Ability type -->
<Row Type="ABILITY_ARMY_SIEGE_BREACH" Kind="KIND_ABILITY"/>
</Types>
</Database><UnitPromotionDisciplines>
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_SIEGE"
Name="LOC_DISCIPLINE_ARMY_SIEGE_NAME"
Description="LOC_DISCIPLINE_ARMY_SIEGE_DESCRIPTION"/>
</UnitPromotionDisciplines>
<!-- Link to Army class -->
<UnitPromotionClassSets>
<Row UnitPromotionClassType="PROMOTIONCLASS_LAND"
UnitPromotionDisciplineType="DISCIPLINE_ARMY_SIEGE"/>
</UnitPromotionClassSets><UnitPromotionDisciplineDetails>
<!-- Root: Bombardier -->
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_SIEGE"
UnitPromotionType="PROMOTION_ARMY_SIEGE_BOMBARDIER"/>
<!-- Tier 2: Sappers (requires Bombardier) -->
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_SIEGE"
UnitPromotionType="PROMOTION_ARMY_SIEGE_SAPPERS"
PrereqUnitPromotion="PROMOTION_ARMY_SIEGE_BOMBARDIER"/>
<!-- Tier 2: Breach (requires Bombardier) -->
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_SIEGE"
UnitPromotionType="PROMOTION_ARMY_SIEGE_BREACH"
PrereqUnitPromotion="PROMOTION_ARMY_SIEGE_BOMBARDIER"/>
<!-- Final: Devastation (via either path, grants commendation) -->
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_SIEGE"
UnitPromotionType="PROMOTION_ARMY_SIEGE_DEVASTATION"
PrereqUnitPromotion="PROMOTION_ARMY_SIEGE_SAPPERS"
GrantsCommendation="true"/>
<Row UnitPromotionDisciplineType="DISCIPLINE_ARMY_SIEGE"
UnitPromotionType="PROMOTION_ARMY_SIEGE_DEVASTATION"
PrereqUnitPromotion="PROMOTION_ARMY_SIEGE_BREACH"
GrantsCommendation="true"/>
</UnitPromotionDisciplineDetails><UnitPromotions>
<Row UnitPromotionType="PROMOTION_ARMY_SIEGE_BOMBARDIER"
Name="LOC_PROMOTION_ARMY_SIEGE_BOMBARDIER_NAME"
Description="LOC_PROMOTION_ARMY_SIEGE_BOMBARDIER_DESCRIPTION"/>
<Row UnitPromotionType="PROMOTION_ARMY_SIEGE_SAPPERS"
Name="LOC_PROMOTION_ARMY_SIEGE_SAPPERS_NAME"
Description="LOC_PROMOTION_ARMY_SIEGE_SAPPERS_DESCRIPTION"/>
<Row UnitPromotionType="PROMOTION_ARMY_SIEGE_BREACH"
Name="LOC_PROMOTION_ARMY_SIEGE_BREACH_NAME"
Description="LOC_PROMOTION_ARMY_SIEGE_BREACH_DESCRIPTION"/>
<Row UnitPromotionType="PROMOTION_ARMY_SIEGE_DEVASTATION"
Name="LOC_PROMOTION_ARMY_SIEGE_DEVASTATION_NAME"
Description="LOC_PROMOTION_ARMY_SIEGE_DEVASTATION_DESCRIPTION"/>
</UnitPromotions><UnitPromotionModifiers>
<Row UnitPromotionType="PROMOTION_ARMY_SIEGE_BOMBARDIER" ModifierId="MOD_SIEGE_BOMBARDIER"/>
<Row UnitPromotionType="PROMOTION_ARMY_SIEGE_SAPPERS" ModifierId="MOD_SIEGE_SAPPERS"/>
<Row UnitPromotionType="PROMOTION_ARMY_SIEGE_BREACH" ModifierId="MOD_SIEGE_BREACH"/>
<Row UnitPromotionType="PROMOTION_ARMY_SIEGE_DEVASTATION" ModifierId="MOD_SIEGE_DEVASTATION"/>
</UnitPromotionModifiers>
<UnitAbilities>
<Row UnitAbilityType="ABILITY_ARMY_SIEGE_BREACH"
Name="LOC_ABILITY_ARMY_SIEGE_BREACH_NAME"
Description="LOC_ABILITY_ARMY_SIEGE_BREACH_DESCRIPTION"
Inactive="true" Permanent="false"/>
</UnitAbilities>
<UnitAbilityModifiers>
<Row UnitAbilityType="ABILITY_ARMY_SIEGE_BREACH" ModifierId="MOD_ABILITY_SIEGE_BREACH"/>
</UnitAbilityModifiers><?xml version="1.0" encoding="utf-8"?>
<GameEffects xmlns="GameEffects">
<!-- Bombardier: +5 vs districts -->
<Modifier id="MOD_SIEGE_BOMBARDIER"
collection="COLLECTION_UNIT_COMBAT"
effect="EFFECT_ADJUST_UNIT_COMBAT_STRENGTH_MODIFIER">
<Argument name="Amount">5</Argument>
<SubjectRequirement id="REQ_DISTRICT_DEFENDER">
<Argument name="DefenderType">DISTRICT</Argument>
</SubjectRequirement>
</Modifier>
<!-- Sappers: Bonus vs walls -->
<Modifier id="MOD_SIEGE_SAPPERS"
collection="COLLECTION_UNIT_COMBAT"
effect="EFFECT_ADJUST_UNIT_COMBAT_STRENGTH_MODIFIER">
<Argument name="Amount">10</Argument>
<SubjectRequirement id="REQ_WALL_DEFENDER">
<Argument name="DefenderHasWalls">true</Argument>
</SubjectRequirement>
</Modifier>
<!-- Breach: Grant ability -->
<Modifier id="MOD_SIEGE_BREACH"
collection="COLLECTION_OWNER"
effect="EFFECT_UNIT_ADJUST_ABILITY">
<Argument name="AbilityType">ABILITY_ARMY_SIEGE_BREACH</Argument>
<Argument name="Amount">1</Argument>
</Modifier>
<!-- Breach Ability: Ignore fortifications -->
<Modifier id="MOD_ABILITY_SIEGE_BREACH"
collection="COLLECTION_OWNER"
effect="EFFECT_UNIT_IGNORE_WALLS"/>
<!-- Devastation: Massive siege bonus -->
<Modifier id="MOD_SIEGE_DEVASTATION"
collection="COLLECTION_UNIT_COMBAT"
effect="EFFECT_ADJUST_UNIT_COMBAT_STRENGTH_MODIFIER">
<Argument name="Amount">15</Argument>
<SubjectRequirement id="REQ_DISTRICT_DEFENDER">
<Argument name="DefenderType">DISTRICT</Argument>
</SubjectRequirement>
</Modifier>
</GameEffects><?xml version="1.0" encoding="utf-8"?>
<Database>
<LocalizedText>
<Row Tag="LOC_DISCIPLINE_ARMY_SIEGE_NAME" Language="en_US">
<Text>Siege Warfare</Text>
</Row>
<Row Tag="LOC_DISCIPLINE_ARMY_SIEGE_DESCRIPTION" Language="en_US">
<Text>Specialize in breaking fortifications and conquering cities.</Text>
</Row>
<Row Tag="LOC_PROMOTION_ARMY_SIEGE_BOMBARDIER_NAME" Language="en_US">
<Text>Bombardier</Text>
</Row>
<Row Tag="LOC_PROMOTION_ARMY_SIEGE_BOMBARDIER_DESCRIPTION" Language="en_US">
<Text>+5 Combat Strength against districts.</Text>
</Row>
<!-- ... additional localization ... -->
</LocalizedText>
</Database><!-- General strength bonus -->
<Modifier id="MOD_STRENGTH_BONUS"
collection="COLLECTION_UNIT_COMBAT"
effect="EFFECT_ADJUST_UNIT_COMBAT_STRENGTH_MODIFIER">
<Argument name="Amount">5</Argument>
</Modifier>
<!-- Defensive strength -->
<Modifier id="MOD_DEFENSE_BONUS"
collection="COLLECTION_UNIT_COMBAT"
effect="EFFECT_ADJUST_UNIT_COMBAT_STRENGTH_MODIFIER">
<Argument name="Amount">7</Argument>
<SubjectRequirement id="REQ_IS_DEFENDER"/>
</Modifier><!-- Extra movement -->
<Modifier id="MOD_EXTRA_MOVEMENT"
collection="COLLECTION_OWNER"
effect="EFFECT_ADJUST_UNIT_MOVEMENT">
<Argument name="Amount">1</Argument>
</Modifier>
<!-- Ignore terrain cost -->
<Modifier id="MOD_IGNORE_TERRAIN"
collection="COLLECTION_OWNER"
effect="EFFECT_UNIT_ADJUST_IGNORE_TERRAIN_COST">
<Argument name="Amount">1</Argument>
</Modifier><!-- Heal after combat -->
<Modifier id="MOD_HEAL_AFTER_KILL"
collection="COLLECTION_OWNER"
effect="EFFECT_UNIT_ADJUST_HEAL_PER_KILL">
<Argument name="Amount">25</Argument>
</Modifier>
<!-- Faster healing -->
<Modifier id="MOD_BONUS_HEALING"
collection="COLLECTION_OWNER"
effect="EFFECT_UNIT_ADJUST_HEALING_BONUS">
<Argument name="Amount">10</Argument>
</Modifier><!-- Increase attached unit capacity -->
<Modifier id="MOD_UNIT_CAPACITY"
collection="COLLECTION_OWNER"
effect="EFFECT_UNIT_ADJUST_UNIT_CAPACITY">
<Argument name="Amount">1</Argument>
</Modifier>- Follow the Tree Pattern - Use root -> tier 2 branch -> final convergence structure
- Balance Choices - Make tier 2 options meaningfully different
-
Commendations at End - Only mark the final promotion as
GrantsCommendation="true" - Thematic Consistency - Keep all promotions in a discipline related to its theme
- Clear Descriptions - Explain exactly what bonuses the promotion provides
- Test Prerequisites - Ensure all prerequisite chains are valid
-
Unique Identifiers - Use clear naming conventions (e.g.,
PROMOTION_ARMY_SIEGE_*)