- Full setup and database structure for civilizations and leaders
- Adding unique abilities with conditional/era-specific modifiers
- Integrating custom 2D art assets (icons, leader portraits, unit art)
- Ensuring Civ VII compatibility with current-era modding practices
- Optional guidance on cross-mod compatibility (namespacing, modular design)
CIVILIZATION VII Modding Guide: Creating New Civilizations & Leaders
Civilization VII introduced a new paradigm for civilizations and leaders, so modding new civs and leaders requires understanding the separate leader selection and era-based civilization system (Civilization VII – The leaders - CivFanatics) (Civilization VII – The leaders - CivFanatics). This guide walks through defining a new Civilization and multiple Leaders in Civ7 using XML/SQL, attaching unique traits and conditional modifiers, adding custom 2D art (icons, portraits, etc.), setting up icon atlases, organizing files/folders, accounting for Civ7’s era modules and dependencies, and following best practices. All information here is drawn from confirmed Civ7 modding documentation, community guides, and real mod examples – no Civ6 references needed.1. Defining a New Civilization in the Database (XML/SQL)
Understanding Civ7 Civilizations: In Civ7, civilizations are tied to specific Ages (eras) rather than spanning the whole game. Each multi-era game starts in Antiquity Age and as you advance to a new Age, you choose a new civilization for that era (Civilization VII – The leaders - CivFanatics). For example, Carthage is an Antiquity Age civ while Great Britain is a Modern Age civ (Update Check-In: Feb 27, 2025 | Civ VII ). A modded civilization must be assigned to an Age so the game knows during which era it’s available. Database Entries: New civilizations are added via XML or SQL that inserts rows into Civ7’s database tables. At minimum, you will define:-
Civilizations Table: a new row with a unique
CivilizationType(an identifier string) and an associatedEraType(e.g. ANTiquity, Exploration, Modern). You’ll also set references to text for the civ’s name and description. For example:In this snippet, CIVILIZATION_SCYTHIA_ANTIQUITY is a unique ID for the civ, and ERA_ANTIQUITY ensures it appears in the Antiquity Age. TheName,Description, andCapitalNameuse localization keys (which you will define in text files – see section 6). -
City Names: You should provide a list of city names for your civ. Civ7 likely uses a table for city name sets (similar to previous Civ games). In XML, this might look like:
This ensures your civ has unique city names when its cities are founded.
-
Starting Biases (Optional): If your civ should prefer certain terrain or start locations, add entries to the starting bias tables. For example, to bias Scythia toward open land:
Bias values indicate relative preference (higher = stronger preference). Similar tables exist for features, resources, etc.
-
Colors: Define your civilization’s colors (used for unit outlines, city banners, etc.). Civ7 assigns each leader a consistent color scheme (since leaders persist while civs change) (Civilization VII – The leaders - CivFanatics), but it’s good practice to set civ colors too for interface elements like civ emblems. Use the
ColorsandPlayerColorstables. For example:Choose distinct primary/secondary colors. This color set will apply to units and city banners when that civ is in use (and possibly to the leader’s UI ribbon if they match historically).
2. Defining Leaders and Leader Abilities
Leaders in Civ7: Leaders are chosen independently from civilizations. The leader you select at game start stays with you through all Ages (carrying their bonuses throughout), while you switch civilizations at each Age transition (Civilization VII – The leaders - CivFanatics) (Civilization VII – The leaders - CivFanatics). This means you can mix and match – e.g. play as a Leader from one culture leading a civ of another – though the game provides an indicator for historical pairings for flavor (Civilization VII – The leaders - CivFanatics). Leaders each have a unique ability and a set of intrinsic attributes (they gain Attribute points in categories like Economic, Scientific, etc., as the game progresses) (Civilization VII – The leaders - CivFanatics) (Civilization VII – The leaders - CivFanatics). Leaders can also have multiple personas (variants with different abilities/agenda), though that is an advanced concept (Civilization VII – The leaders - CivFanatics). Database Entries for Leaders: To add a new leader, you will create:-
Leaders Table: a new row with a unique
LeaderType. You’ll reference text for their name and a title. For example:Here LEADER_TOMYRIS is the ID for the leader.AgendaTypecan link to an agenda if your leader has one (optional – agendas affect AI behavior).Iconreferences the leader’s portrait icon (we’ll ensure this icon is defined in section 4). - Leader Traits: Each leader has a Leader Ability – a unique trait that confers some bonus. You will define this trait in the Traits table and then assign it to the leader via the LeaderTraits table. (Trait creation is covered in section 3, since civ abilities are done similarly.)
-
Leader Attributes: Civ7 leaders have classifications (like Militaristic, Scientific, etc.) that determine their Legacy Attribute bonuses gained over time (Civilization VII – The leaders - CivFanatics). In the database, these might be represented by boolean columns or a mapping table linking leader to attribute archetypes. For example, if your leader should be a Cultural and Scientific leader, you might have something like:
(The exact implementation may vary, but ensure your leader’s profile fits one or more of the six attribute trees: Cultural, Diplomatic, Economic, Expansionist, Militaristic, Scientific (Civilization VII – The leaders - CivFanatics).)
-
Leader-Civ Pairing (Guaranteeing Civ Choices): Although any leader can lead any civ in gameplay, you might want certain leaders to guarantee their historical civ appears as an option at the appropriate Age. Civ7’s design ensures that if you play as a given leader, their civilization will be offered during the correct Age transition (Civilization VII – The leaders - CivFanatics). For example, playing as Amina guarantees Songhai will be available in the Exploration Age (Civilization VII – The leaders - CivFanatics). To implement this, there is likely a table linking leaders to civilizations (and possibly to the era in which that civ should appear). For a modded leader and civ, you’d add an entry such as:
This hypothetical entry would ensure that if a player’s chosen leader is Lakandula (a leader added for the Philippines), the Philippines civilization will show up as an available choice when the Modern Age arrives. This step isn’t strictly required, but it aligns historical combos and helps the AI pick sensible civs for a mod leader.
LOC_LEADER_<NAME>_NAME (leader’s name) and LOC_LEADER_<NAME>_TITLE (usually an epithet or title like “Queen of Scythia”).
Leader Portrait and Model: The leader’s 2D portrait and 3D model are assets you’d normally provide. As of now (early Civ7 modding), adding custom 3D leader models is not yet possible for modders (Philippines - Modern | CivFanatics Forums). Modders use existing models or placeholders. You can, however, add a custom 2D portrait for the leader in diplomacy screens and selection (covered in section 4).
Example: If we were adding Tomyris as a new leader for Scythia, we create LEADER_TOMYRIS in Leaders table, give her a unique ability trait (e.g., “Killer of Cyrus” trait that grants bonus damage to wounded units), and assign that via LeaderTraits. We might mark her as Militaristic/Expansionist in attributes. And since Scythia is an Antiquity civ, we could tie Tomyris to Scythia in Antiquity (so that the Scythia civ option appears in Antiquity if Tomyris is the player’s chosen leader). Once defined, Tomyris can actually lead any civ the player chooses – but her abilities will obviously be designed with Scythia in mind.
We now have the basic civ and leader entries set up. Next, we tackle giving them interesting unique abilities.
3. Unique Traits, Abilities, and Conditional Modifiers
One of the core parts of making a custom civ or leader is designing their unique traits: civ abilities, leader abilities, unique units, unique buildings, etc. Civ7’s modding uses a Modifier system (similar to previous games) to implement these abilities via database entries. You’ll define Traits to represent each unique feature, then attach Modifiers to those traits to cause in-game effects. You can also specify Requirements that gate those modifiers (for era-locking, conditional bonuses, etc.). Trait Definition: In theTraits table, add a row for each unique ability. For example:
- Civ abilities go in
CivilizationTraits(linkingCivilizationTypetoTraitType). - Leader abilities go in
LeaderTraits(linkingLeaderTypetoTraitType).
Modifiers table to create a new modifier, then use TraitModifiers to attach it to your trait.
For example, suppose Scythia’s civ trait grants light cavalry units +1 additional movement and heal 30 HP when killing an enemy. We might implement this with two modifiers:
- Modifier A: Increase movement of light cavalry.
- Modifier B: Heal unit on kill.
Modifiers have fields like OwnerRequirementSetId or SubjectRequirementSetId and the game knows context (e.g. “units of this civ”). If needed, we use Requirements.
Requirements and Conditional Effects: Civ7 supports making bonuses conditional on game state, era, etc. For instance, maybe a leader’s bonus applies only after the Industrial Age, or a unit ability works only outside friendly territory. Requirements are defined in tables such as Requirements and RequirementArguments, and then grouped in RequirementSets.
For example, consider the Bayanihan ability from the Philippines mod (Modern civ) which grants influence and culture when war is declared on you, gives +50% influence to global Endeavor proposals, but imposes –10 combat strength on units outside your territory (Philippines - Modern | CivFanatics Forums). To implement something like this:
- War Declaration Trigger: A modifier of type “PLAYER_YIELD_ON_WAR_DECLARED” with arguments for 100 Influence and 50 Culture, plus a requirement that the war is defensive (war declared on you).
- Influence to Endeavors: Perhaps a modifier type “ADJUST_INFLUENCE_PROPOSAL_PERCENT” with value 50, no additional requirement (always active).
- Combat Strength Penalty outside territory: A unit combat modifier with a Requirement that
IsOutsideFriendlyTerritory = true(so it only applies outside borders).
ModifierRequirements (or appropriate field in Modifiers table linking the requirement set to that modifier’s effect scope).
The result: units get -10 Combat Strength only when the requirement (outside territory) is true. Similarly, for era-locked traits, you could use a requirement like “CurrentEra >= Industrial” to gate a bonus starting in a certain era.
Era-Locked Civ Abilities: Since civs themselves are era-specific in Civ7, you usually won’t need to lock a civ ability by era (the civ ability inherently only exists during that civ’s era). However, leader abilities span the whole game and you might want part of a leader’s bonus to only kick in later or under conditions. Use requirements for that. For example, a leader could have “In Industrial or later, do X” – implemented by requirement “PlayerCurrentEra >= ERA_INDUSTRIAL” on the respective modifier.
Testing and Debugging Modifiers:Civ7’s database is particular—if you reference a column or table incorrectly, your mod can fail to load. It’s good practice to enable the in-game Debug Database to verify your new entries and troubleshoot issues. One modder suggests enabling debugging and inspecting the Gameplay DB to understand the table structure
(Civ 7 Modding Questions | CivFanatics Forums).
For instance, some tables might not have the columns you expect. In one case, a modder attempted to update a
GameEffects table with non-existent columns, not realizing that the XML structure was updating multiple underlying tables(Civ 7 Modding Questions | CivFanatics Forums)
(Civ 7 Modding Questions | CivFanatics Forums). Lesson:
Always ensure your
<Update> or <Insert> statements match the actual schema of the database tables you are modifying.
Tip: Use a good XML/SQL editor. Editors like VS Code with an XML extension will highlight unclosed tags or syntax errors, which helps prevent modinfo or XML mistakes (Civ 7 Modding Questions | CivFanatics Forums). They can also auto-format your XML for readability.Unique Units, Buildings, Improvements: These are typically implemented as traits as well. There are two approaches:
-
Replacement Method: Create a new unit and mark it as replacing a base unit for your civ. Civ7 likely has a mechanism similar to Civilization VI where a unique unit is tied to a civ via a trait or an override entry. For example, in the Antiquity template, Archanist included an “infantry replacement” unique unit (Antiquity Civilization Template (XML) | CivFanatics Forums). You would define the unit in
Unitstable (with its stats, abilities, etc.), then either:- Use
Units_XP2style table (if exists) or aUnitReplacestable to indicate “CIVILIZATION_SCYTHIA_ANTIQUITY’s unique unit replaces the Heavy Chariot” (for example). - Or simpler, give the unique unit a
PrereqCivorTraitTypein its definition to lock it to that civ. Example:
This would mean Scythia builds Saka Horse Archers in place of Heavy Chariots. If a formalUnitReplacestable doesn’t exist, the mod might instead rely on a trait and requirement: e.g. create a trait “Scythia unique unit trait” and give the unit a requirement so only Scythia can train it. The Antiquity template and existing mods use the straightforward replacement pattern for ease. - Use
-
Additive Method: If your unique unit/building is not a direct replacement, you can simply add the new unit and use the
Unitstable’s civ restriction. For example, a unique Improvement (tile improvement) might be locked by a trait:By putting the civ’s trait in the Improvement’sTraitType, only that civ can build it.
Modifiers and UnitAbilities tables. For example, if your unique unit has an ability (like +5 combat strength when attacking), you would create a UnitAbility in the DB and assign a modifier to it, then assign that ability to the unit. The template mod includes a sample unique improvement and unit with their modifiers commented for guidance (Antiquity Civilization Template (XML) | CivFanatics Forums).
Testing Traits in-game: After implementing traits and modifiers, test in a new game. Use FireTuner or log files (Database.log and Modding.log) to verify your mod loaded. If something isn’t working (e.g., your ability doesn’t show or function), check for XML errors or logic mistakes. Often, a missing reference (like a Modifier not tied to a Trait, or a Trait not assigned to the civ) is the culprit.
Example: In the Philippines (Modern) mod, the civ’s unique ability “Bayanihan” is implemented via XML. Its description: “Receiving a declaration of war grants +100 [Influence] and +50 [Culture]. +50% Influence towards proposing and supporting Endeavors. -10 Combat Strength for land units outside friendly territory.” (Philippines - Modern | CivFanatics Forums). To achieve this, the modder created multiple modifiers – one triggered on war declaration to add Influence and Culture, one adjusting Influence yield for World Congress-style endeavors, and one applying a combat penalty with a territory requirement. These are all attached to the Philippines civ trait. Despite the complexity, it’s all done with XML database entries (no Lua scripting yet), showing the power of the modifier system.
As another example, Izica’s Scythia mod gives Scythia a classical unique unit (likely a horse archer) and possibly a unique ability related to cavalry. These would be set up via traits and modifiers as described. By structuring your XML/SQL in this modular way (traits -> modifiers -> requirements), you can recreate almost any in-game effect for your custom civ or leader. Just ensure the modifiers you choose exist in Civ7’s schema. When in doubt, find a similar ability from the base game and mirror its database entries.
4. Integrating Custom 2D Art: Icons, Portraits, and Atlases
No custom civ or leader feels complete without unique icons and artwork. Civ7 mods can include 2D art assets such as civilization icons (emblem symbols), leader portraits, unit icons, building icons, etc. These are typically provided as image files (usually DDS format) and referenced via Icon Atlases in the database. Creating the Images: Prepare your artwork in the correct aspect ratio and resolution:- Civ icons (emblems) usually appear as circular icons in two sizes: small (e.g. 32x32 or 64x64) for city banners, and large (256x256) for selection screens.
- Leader portraits are typically square or circular portraits that might be 256x256 or 512x512 in resolution.
- Unit and Building icons often use 256x256 or 128x128 for the large versions, plus smaller versions for HUD elements.
Scythia_Icon_256.dds, Tomyris_Portrait_256.dds, etc.). Place them in your mod folder (e.g., in an “Art” or “Icons” subfolder).
Defining Icon Atlases: Civ7 uses atlases to group icons. An IconTextureAtlas is a collection of same-size icons in a single image file (the DDS). Even if your DDS has only one icon, you define an atlas entry for it. Each atlas entry specifies an Atlas name, the icon size (resolution of each icon), the sheet dimensions in terms of number of icons per row/column, and the filename. Then individual icons are defined by name and an index pointing into that atlas. This is very similar to Civ5/Civ6’s system.
For example, to define a 256px atlas for our civ icon and a 256px atlas for our leader portrait:
- We create an atlas
ICON_ATLAS_CIVILIZATION_SCYTHIA_256for the Scythia civ icon at 256px. Since the image has 1 icon, we set 1x1 grid. - Similarly,
ICON_ATLAS_LEADER_TOMYRIS_256for the leader portrait. - We also made a 32px version for the civ icon (
ICON_ATLAS_CIVILIZATION_SCYTHIA_32) for smaller UI elements. - Then we define
ICON_CIVILIZATION_SCYTHIAandICON_CIVILIZATION_SCYTHIA_SMALLicons that point to those atlases. We also defineICON_LEADER_TOMYRISfor the leader portrait.
- Civilization Icon: In the
Civilizationstable, there is often a field for the icon. If not, the game might automatically look for an icon matching the civ’s type. To be safe, you can set the civilization’s emblem by an entry in aCivilizationIconstable or similar (if exists) or ensure your icon’s name follows the convention. Civ7 might use the convention thatICON_CIVILIZATION_<CIVTYPE>is the emblem. In our example, we named it exactly that, so the game should pick it up for city banners, etc. - Leader Portrait: The
Leaderstable has anIconfield (as seen in section 2’s example). We setIcon="ICON_LEADER_TOMYRIS". This means the game will use our custom portrait for Tomyris in menus and diplomacy. - Unit/Building Icons: Similar process – define atlases for any new unit or building icons and set the unit’s
Iconfield to your icon name in the Units/Buildings table.
- Ensure the atlas
Nameis unique across all mods. The game merges icon atlases into a global set, and duplicate (Name, IconSize) combinations will cause database errors (unique constraint failures). For instance, using a generic name like “ICON_ATLAS_UNIT_256” that another mod also used could conflict. To avoid this, prefix your atlas names with your civ or mod name (we did this by including “SCYTHIA” or “TOMYRIS” in the name). - The same applies to
IconNameentries – keep them unique.
- The file is included in the mod (in ModInfo, see section 5).
- The Filename in the atlas entry exactly matches your file name (without path, the game will look in the mod’s folder automatically).
- The DDS format is supported (uncompressed or DXT compression with mipmaps if needed).
- Your atlas name and icon definitions have no typos.
- In leader selection, does your leader portrait appear?
- When you enter a game as that civ, does the civ icon appear on the city banner or top panel?
- If an icon is missing, the game might show a default “unknown” icon. That means something didn’t match up – check that the
IconNameused by the UI matches one of your IconDefinitions. Using logging or FireTuner, you can inspect theIconManagerrequests.
5. Mod Structure, Files, and Folder Organization
To ensure the game loads your civilization and leader properly, you must structure your mod files according to Civ7’s expectations: Mod Folder: Each mod resides in its own folder (under…/My Games/Sid Meier’s Civilization VII/Mods/ for manual installations). You can name it after your mod (e.g., “ScythiaAntiquityMod”). Inside this folder, at minimum, you need:
- A
.modinfofile (XML format) that describes the mod and its components. - Your XML/SQL files containing the new game data (as created in sections above).
- Localization files for text (XML or CSV).
- Art asset files (DDS images, etc.).
- Mod id: a unique GUID for your mod (you can generate one). This is important for compatibility and for dependencies.
- Properties: Contains user-friendly name, description, etc.
- Dependencies: If your mod requires another mod or DLC to be present. For instance, if Firaxis packaged each Age’s civs as separate official content, you might list a dependency on “Age – Antiquity” so that your mod loads in context. In practice, the base game’s Ages are core content, so you usually don’t need a dependency for them. But if your mod builds on another mod (e.g., uses someone’s custom assets or functions), list that mod’s ID here.
-
Components: This is where you declare what your mod does. Common components:
<UpdateDatabase>– for adding/updating game database (XML/SQL files for gameplay).<UpdateText>– for localization text files.<ImportFiles>– for including art or other files. Ensure each art file is listed so it gets packed or recognized.- You might also see
<UpdateArt>or specific components for art definitions in official mods, but using UpdateDatabase for icons (as we did) is fine.
-
Criteria (Optional): Civ7 might allow enabling content only in certain game setups via Criteria blocks. In Civ6, modinfo had
<Blocks>with<Criteria>to load content only if certain rules (like a specific game mode active). In Civ7, one potential use is to ensure your mod only activates when starting in the appropriate era or if a certain expansion is present. For instance, if you made a Modern Age civ mod and wanted it not to error in games that end before Modern, you might wrap its content in a criterion. However, generally if a civ’s era never comes up, it simply won’t be used rather than causing errors. The Age modules are always part of the game progression by default, so explicit criteria might not be needed unless Firaxis changes that logic.
6. Civ VII-Specific Requirements: Era Modules, Criteria, and Dependencies
Civ7’s era system means your mod content must align with the correct Age. There are a few special considerations to keep in mind:- Base Game “Modules” for Ages: Civ7’s official content is divided by Ages. For example, the base game includes Antiquity, Exploration (Medieval/Renaissance), and Modern Age civs out of the box. Additional civs are being added via DLC by age (e.g., Carthage (Antiquity) and Great Britain (Modern) in a post-release pack (Update Check-In: Feb 27, 2025 | Civ VII ), and later Bulgaria (Exploration) and Nepal (Modern) (Update Check-In: Feb 27, 2025 | Civ VII )). These are integrated seamlessly into the Age transitions. For modders, this typically doesn’t require special action – if you add an Antiquity civ, it will be available to choose at game start (Age 1). If you add a Modern civ, it will appear as a choice when players transition to Modern. The game should handle it as long as EraType is set correctly on your Civilization row.
-
Starting Era or Scenario Considerations: If players can start in a later era or if there’s a mode that omits early ages, you may want to ensure your civ is loaded only when relevant. Civ7’s modding system likely allows Criteria checks for
GameStartEra. For instance, if your mod is a Modern-only civ and a player starts in Antiquity, it doesn’t hurt (the civ will just sit unused until Modern age). But if a player starts directly in Modern (skipping earlier ages), your civ would be immediately available – which is fine. There’s no need to block it. However, if you had a mod that for some reason shouldn’t load unless a certain condition is true (say a total conversion that replaces base civs), you’d use the<Blocks>and<Criteria>system. E.g.,This is advanced usage – for a standard new civ, you typically won’t need a criteria block. -
Dependencies on Expansions or Other Mods: Currently, Civ7 does not have expansions (beyond DLC civ packs) yet, but if it did (or if certain gameplay modes exist, like a hypothetical “Mythology Mode” altering rules), you could set your mod to require or be compatible with them. For example, if a future expansion adds a new Attribute or new content that your mod civ uses, you might list that expansion’s Mod ID under
<Dependencies>so that players can’t enable your mod without it. For community mod dependencies, if your civ mod builds on, say, another mod that adds a new resource or mechanic, definitely list that mod’s GUID in Dependencies to avoid errors if it’s missing. -
Ensure Unique IDs: As mentioned, avoid name clashes not just in art, but in all IDs. Use a consistent prefix for your
TraitType,UnitType, etc. (For example, useSCYTHIA_or an author tag in your identifiers.) This prevents conflicts if another mod coincidentally uses the same name. It also helps keep the database unique constraints happy. The game will throw errors if you try to insert a duplicate primary key. For example, if two mods unknowingly defineTRAIT_CIVILIZATION_EXAMPLE, one will fail to load. Using prefixes likeTRAIT_CIVILIZATION_SCYTHIA_EXAMPLEvsTRAIT_CIVILIZATION_OTHERMOD_EXAMPLEavoids that. - Mod Compatibility: Civ7 is still new, so mod interactions are relatively untested. Generally, adding new civs/leaders is low-conflict (each mod just adds its entries). But if two mods modify the same thing (like both alter the same base Leader ability or both try to replace the same unit class with different uniques), then conflicts arise. As a best practice, do not directly edit base game entries unless absolutely necessary. Instead, add new ones or use modifiers to change behavior. This way, multiple civ mods can co-exist. For instance, if you wanted to buff an existing civ as part of your mod, it’s better to do it via a Modifier attached in your mod (so if someone else changes that civ, both modifiers apply) rather than overwriting the base values.
-
Testing with Other Mods: After confirming your mod works alone, test it alongside a few popular mods (UI mods, etc.) to ensure nothing odd happens. Keep an eye on the in-game Mods menu – Civ7 might eventually have load order management. The general rule is that
<UpdateDatabase>actions execute in unspecified order unless you set dependencies. If your mod must load after another to function, use the dependency tag.
7. Examples from the Community and Best Practices
Learning from existing mods can accelerate your understanding. Here are a few practical examples and takeaways:- Archanist’s Civilization Template (Antiquity): Modder Archanist released an “Antiquity Civilization Template” to help others (Antiquity Civilization Template (XML) | CivFanatics Forums). This template provides a barebones civ with one unique improvement, one unique unit (an infantry replacement), and one commander (Great General) replacement, complete with commented XML explaining each part. It also includes a design guide noting common trends in official civs (e.g., most civs have one unique unit and one unique infrastructure). This resource is invaluable – you can use it as a starting point for your own mod by find-and-replacing names and then customizing. The template focuses on Antiquity; if you aim to make a Modern civ, be aware some tables (like which civics/techs unlock things) differ – but the structure is analogous.
- Philippines (Modern) mod by Archanist: This is a working example of a custom Modern Age civ mod (Philippines - Modern | CivFanatics Forums) (Philippines - Modern | CivFanatics Forums). It adds the Philippines civilization (available in Modern Age) with two unique units, two unique buildings, and even a unique Wonder (Corregidor) – a very ambitious mod. Because Civ7 mod tools were limited at release, Archanist mentions that many assets use placeholders and everything was done through XML (Philippines - Modern | CivFanatics Forums). The civ ability (Bayanihan) we discussed earlier shows how complex effects can be achieved via XML. Notably, the mod is marked Alpha, implying things like custom models weren’t in yet. Still, the gameplay aspects (database entries for units, buildings, yields) work. This mod’s discussion thread reveals insights: they plan to add more mechanics once gameplay scripting (Lua) is available (Philippines - Modern | CivFanatics Forums), and they will eventually add Civilopedia entries once design is finalized (Philippines - Modern | CivFanatics Forums). Takeaway: Start with the core XML functionality; fancy UI or scripted behavior can come later when tools allow. Focus on making the civ playable and balanced first.
- Izica’s Scythia (Antiquity) mod: Another early example, adding Scythia led by King Ateas as an Antiquity civ. This mod likely uses an existing leader model (since Tomyris was a leader in a past Civ game) and gives Scythia thematic bonuses (perhaps extra horses or cavalry boosts). The existence of this mod, along with the Philippines, confirms that adding both a new civ and a custom leader is feasible in Civ7’s framework (civ 7 | CivFanatics Forums). Takeaway: Check CivFanatics’ Civ7 – New Civilizations category for mods like these. Studying their files (if provided) can show exactly how they structured the modinfo, what trait and modifier combos they used, etc. Many modders share their code or at least can answer questions in the forums.
- Community Collaboration: Civilization modding has always thrived on community knowledge. CivFanatics forums have a “Civ7 Creation & Customization” section where you can ask questions and see solutions. For instance, if you encounter a tricky issue (like an XML error you can’t trace), chances are someone like PoundedChicken or Gedemon has posted a solution or debugging tip. We saw an example where a modder had XML errors and another user pointed out a tag mismatch and misuse of a table (Civ 7 Modding Questions | CivFanatics Forums) (Civ 7 Modding Questions | CivFanatics Forums). Don’t hesitate to use these forums – even as Civ7 modding is evolving, the community is actively figuring it out together.
- Modularity: Keep your mod’s scope focused. Don’t modify core files heavily – instead add new entries or use modifiers to change behavior. This ensures compatibility with other mods and game updates.
- Unique Identifiers: Prefix everything (as mentioned) – from file names to XML IDs – with something unique (your mod name or an abbreviation). This prevents collisions and makes your mod content easily identifiable in logs.
- Balance: Follow the general balance of official civs unless you intentionally want an overpowered or challenge civ. For example, official civs usually have 1 unique unit and 1 unique infrastructure (building/improvement) or 2 uniques of one type, plus their trait. If you give 4 uniques and massive bonuses, it might be fun once but could break the game’s challenge. Aim for comparable power level, then playtest and adjust. The community often creates balance patches or feedback threads for mods – be receptive to that.
- Localization: Provide text for all in-game text your mod uses. At minimum Name and Description for civ, leader, units, etc. Missing text keys will show as debug strings in game which looks unpolished. Also, consider adding translations (even if just English) in the multi-language structure Civ7 uses, so players on different language settings don’t see nothing. The template likely shows how to format the Text XML with
<LocalizedText>entries for different languages. - Documentation: Keep comments in your XML or a readme in your mod to document any tricky parts. This helps if you leave the mod for a while and come back, or if others want to learn from your mod.
- Testing: Test your civ in various scenarios – start a game at the beginning with your civ, and if applicable, use your leader with a different civ to ensure nothing breaks (leaders should still give their ability regardless of civ). Test age transitions (if your civ is not Antiquity, use the “Start Age” option or play until that age to see if it appears correctly). Also test AI handling – does the AI know how to use your unique unit or ability? (Often it will treat it like a normal unit unless you gave it something radically new.)
- Firaxis, Civilization VII – Official Gameplay Guide: Leaders, on leader-civilization selection and leader abilities (Civilization VII – The leaders - CivFanatics) (Civilization VII – The leaders - CivFanatics).
- Firaxis, Civ VII Update Notes (Feb 2025) – details on new official civs/leaders by Age (Update Check-In: Feb 27, 2025 | Civ VII ) (Update Check-In: Feb 27, 2025 | Civ VII ).
- CivFanatics Forums – Philippines (Modern) mod by Archanist (mod description and notes on limitations) (Philippines - Modern | CivFanatics Forums) and Antiquity Civ Template (tutorial) (Antiquity Civilization Template (XML) | CivFanatics Forums).
- CivFanatics Forums – Modding Questions & Answers: community troubleshooting (XML errors, tips on using proper tags) (Civ 7 Modding Questions | CivFanatics Forums) (Civ 7 Modding Questions | CivFanatics Forums).
- CivFanatics Forums – Civ7 New Civilizations category listing user-created civ mods (e.g., Scythia Antiquity, Philippines Modern) (civ 7 | CivFanatics Forums) (civ 7 | CivFanatics Forums).
- CivFanatics Forums – Philippines mod discussion (unique ability “Bayanihan” example) (Philippines - Modern | CivFanatics Forums).