SKILL.md
Victoria 3 Mod Development
Guide for creating and modifying Victoria 3 mods using Paradox's scripting language.
Quick Start
Mod Structure
Every Victoria 3 mod requires:
.mod descriptor file in Documents/Paradox Interactive/Victoria 3/mod/
- Mod folder with content in subdirectories:
- common/ - Game logic (decisions, buildings, laws, technologies, etc.) - events/ - Event files - localization/ - Localization files (YAML format) - gfx/ - Graphics assets - gui/ - GUI modifications
Basic .mod File Format
version="1.0.0"
tags={
"Gameplay"
}
name="My Mod"
supported_version="*"
path="mod/MyMod"
remote_file_id=""
Common Modding Tasks
Creating Decisions
Decisions go in common/decisions/. Format:
my_decision = {
is_shown = {
# Conditions for decision to appear
is_ai = no
}
possible = {
# Conditions for decision to be available
bureaucracy > 100
}
when_taken = {
# Effects when decision is taken
add_modifier = {
name = my_modifier
days = 365
}
}
ai_chance = {
base = 0
}
}
Creating Events
Events go in events/. Format:
namespace = mymod
mymod.1 = {
type = country_event
title = mymod.1.t
desc = mymod.1.desc
option = {
name = mymod.1.a
# Option effects
}
}
Localization
Localization files go in localization/<language>/ as YAML:
l_english:
mymod.1.t:0 "Event Title"
mymod.1.desc:0 "Event description."
mymod.1.a:0 "OK"
Common File Types
- Decisions:
common/decisions/*.txt
- Events:
events/*.txt
- Buildings:
common/buildings/*.txt
- Laws:
common/laws/*.txt - See [Creating Laws](references/creating-laws.md) for detailed guide
- Law Groups:
common/law_groups/*.txt - Required for laws
- Technologies:
common/technology/*.txt
- Cultures:
common/cultures/*.txt
- Countries:
common/country_definitions/*.txt
- Modifiers:
common/static_modifiers/*.txt
- Scripted Effects:
common/scripted_effects/*.txt
- Scripted Triggers:
common/scripted_triggers/*.txt
Creating Laws
Quick example:
# 1. Create law group (common/law_groups/my_group.txt)
my_law_group = {
law_group_category = economy
}
# 2. Create law (common/laws/my_law.txt)
my_custom_law = {
group = my_law_group
icon = "gfx/interface/icons/law_icons/my_law.dds"
progressiveness = 50
modifier = {
country_construction_efficiency_add = 0.1
}
}
# 3. Add localization (localization/english/my_law_l_english.yml)
# my_custom_law:0 "My Custom Law"
See [Creating Laws](references/creating-laws.md) for complete guide.
Syntax Guidelines
Scope Operators
ROOT - Original scope
THIS - Current scope
FROM - Previous scope
PREV - Previous scope in chain
Common Conditions
is_ai = yes/no - Check if AI controlled
has_modifier = <name> - Check for modifier
hastechnologyresearched = <tech> - Check technology
bureaucracy > <value> - Numeric comparisons
ownsentirestate_region = <state> - State ownership
Common Effects
add_modifier = { name = <name> days = <days> }
set_variable = { name = <name> value = <value> }
addtechnologyresearched = <tech>
triggerevent = { id = <eventid> }
Reference Files
For detailed information on specific modding areas, see:
- [File Structure](references/file-structure.md) - Complete directory structure
- [Syntax Reference](references/syntax-reference.md) - Detailed syntax guide
- [Common Patterns](references/common-patterns.md) - Common modding patterns
- [Examples](references/examples.md) - Real-world examples
- [Glossary](references/glossary.md) - Comprehensive terminology dictionary
- [CWTools Guide](references/cwtools-guide.md) - Using CWTools for validation and auto-completion
- [Creating Laws](references/creating-laws.md) - Complete guide for creating new laws
Debugging
Common issues:
- Syntax errors: Check brackets, quotes, and indentation
- Missing localization: Ensure all keys exist in localization files
- Scope errors: Verify scope operators are correct
- File paths: Ensure files are in correct directories
Use game's error log to identify issues. Check Documents/Paradox Interactive/Victoria 3/logs/ for error messages.