• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.
Questions (patch notes, sometimes paraphrased, begin with "-"; my questions don't begin with "-")

Code:
- a set of modifiers whose sum for a given stat can never be positive (allows your giving bonuses that only offset maluses instead of bonus that are positive no matter what)
What does this mean?
Effective stat is ceiling (stat + stat_penalty)
Code:
- Added "symptom=" triggers
Is this char scope? Are symptoms different from traits?
Symptoms are traits coded with the is_symptom = yes switch. I don't see anywhere symptom = x is used in the vanilla script, but I would assume it would be valid in character scope.
Code:
- Added disease_defence trigger that tests the disease defense in a province. Province scope
Compares to a number?
Yes, I believe a number in the range 0-1.0.
Code:
- Added triggers: any_hospital num_of_hospitals num_of_hospitals_diff hospital_has_any_building
What scope are they in? What are RHS?
- Added Event scope: hospital_owner
What scope are they in? RHS is holding?
- Added triggers monthly_prestige and monthly_piety.
What scope?
- Added effects scaled_prestige and scaled_piety.
What scope?
- It is now possible to script council voting for targeted_decisions.
What does this mean?
- Added set_pentarch_title = <title/none> effect.
What scope? Any title or some specific?
- has_terrain_specialization now takes "yes" and "no" as parameters as well, in addition to "any" and specific terrains
What is has_terrain_specialization in the first place?
- Can now add and destroying buildings in extra holdings (trade posts, forts & hospitals) with the following effects: <stuff>
What scope?
- The following effects have been added. They work the same as the equivalent for forts or trade posts: create_hospital destroy_hospital any_hospital
What are scopes and RHS?
- Added join_faction, leave_faction and start_faction effects.
What scopes and RHS?
- Added faction_exists trigger.
What scopes and RHS?
- Added export_to_variable effect.
What is it?
- Added while effect.
What is it?
Code:
while = {
   limit = { <condition> }
   <effect>
Repeat <effect> until <condition> is not met.
Code:
- Added a "set_preferred_capital" effect, which sets the preferred capital of the title in the current scope (used for a variety of things, such as the AI to determine where to put their capital). Only works for dynamic titles, as static titles base their capital off of the landed_titles folder
Is the RHS a title or prov or what?
I hope @Divine can drop in and answer some more of these.
 
The only difference about "symptom =" and "trait =" is that they gain different tooltips.

"any_hospital = { }": <character> = { <province that contains a hospital owned by character> }
Exists as both trigger and effect.
"num_of_hospitals" in character scope.
"num_of_hospitals_diff = { character = <character> value = <int> }" in character scope.
"hospital_has_building = <buildingtag>" in province/barony/county scope.
"hospital_has_any_building = x" in province/barony/county scope. Interestingly it will return true if the hospital contains any building no matter what "x" is.
"monthly_prestige, monthly_piety" in character scope.
"scaled_prestige, scaled_piety = { min = x max = y value = z }" in character scope. Takes percentage of yearly income.
"set_pentarch_title" in title scope.
"has_terrain_specialization" in character scope. Is checking for the command traits that has at least 1 terrain assigned to them. eg "Jungle Expert"
"add_to_extra_holding, destroy_in_extra_holding" in province/county scope.
"create_(fort/tradepost/hospital)" in character/title scope for the owner. Right hand side is the province.
"destroy_(fort/tradepost/hospital)" doesn't care about the current scope. Right hand side is the province.
"random_(fort/trade_post/hospital)" in character scope. Evaluates provinces that contains extra holdings. Note:trade_post and not tradepost.
"any_(fort/trade_post/hospital)" in character scope. Evaluates provinces that contains extra holdings. Note:trade_post and not tradepost.
Exists as both trigger and effect.

"join_faction = { faction = <factiontag> faction_leader = <character> (ignore_requirements = yes) }" in character scope.
"leave_faction = <factiontag/all>" in character scope. Bools default to no.
"start_faction = { faction = <factiontag> title = <target liege title> (thirdparty = <claimant character> can_join_existing = yes ignore_requirements = yes) }" in character scope. Bools default to no.
"faction_exists = { faction = <factiontag> title = <target title> (thirdparty = <claimant character>) } in character scope. This is supposed to be the character that is targeted by the faction.
 
  • 4
Reactions:
I'll commit suicide. I have mod "Restore Carthage". Folder in documents/blahblah/mod is named "Restore Carthage". .mod file is named Restore Carthage.mod. In this file i named this mode "Restore Carthage".

SO WHY I CANNOT RUN VALIDATOR ;_;

Mod not found: Restore Carthage
Mods in system: Restore Carthage
Problem with Restore Carthage: Missing the 'path' attribute. Even if you have set 'archive', the Validator cannot read zip files. You must set the 'path' attribute and unzip the files to where the 'path' attribute specifies.
 
I'll commit suicide. I have mod "Restore Carthage". Folder in documents/blahblah/mod is named "Restore Carthage". .mod file is named Restore Carthage.mod. In this file i named this mode "Restore Carthage".

SO WHY I CANNOT RUN VALIDATOR ;_;
It looks like you do not have
Code:
path = "mod/Restore Carthage"
in your Restore Carthage.mod file.
 
  • 1
Reactions:
Version 1.16.1 seems to be confused, Every error has the following line:
Code:
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
 
Code:
--- Error 1 of 1 ---
At <mod>\common\disease\00_disease.txt [dancing_plague\timeperiod\can_outbreak] (Line 2082, column 3):
Invalid node "can_outbreak" in scope TimePeriod (value is: <a complex type>)
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
New field in disease definitions (probably only valid with rip = yes), found in timeperiod scope, takes global triggers like has_dlc, has_global_flag, has_game_rule.
Code:
--- Error 1 of 1 ---
At <mod>\common\disease\00_disease.txt [dancing_plague\disease_gfx] (Line 2096, column 2):
Invalid node "disease_gfx" in scope Disease (value is: disease_gfx_dancing_plague)
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
New command in disease definitions (probably only valid with rip = yes), takes a gfx_disease_* tag on the RHS.
Code:
--- Error 1 of 1 ---
At <mod>\common\disease\00_disease.txt [syphilis\yearly_province_pulse\random_list\90\modifier\location] (Line 1829, column 6):
Invalid node "location" in scope ProvRandomListModifier (value is: <a complex type>)
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
location should be valid inside ProvRandomListModifiers, considering how often it is used there.
Code:
--- Error 1 of 1 ---
At <mod>\common\disease\00_disease.txt [bubonic_plague\major] (Line 854, column 2):
Invalid node "major" in scope Disease (value is: yes)
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
major = yes is valid in disease definitions (used in the definition of bubonic_plague)
Code:
--- Error 1 of 1 ---
At <mod>\decisions\rip_various_decisions.txt [decisions\shut_the_gates\effect\hidden_tooltip\if\remove_guardian] (Line 1063, column 6):
"yes" is not a valid MaybeEventTarget(Char).
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
remove_guardian can now take yes.
Code:
--- Error 1 of 1 ---
At <mod>\decisions\rip_various_decisions.txt [targeted_decisions\demand_gavelkind_use_favor\allow\FROM\in_seclusion] (Line 455, column 5):
Invalid node "in_seclusion" in scope CharTrigger (value is: no)
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
New trigger in character scope
Code:
--- Error 1 of 1 ---
At <mod>\decisions\rip_various_decisions.txt [targeted_decisions\interfere_in_vassal_war_defender_use_favor\potential\FROMFROM] (Line 319, column 4):
No direct match found for FROMFROM (is the casing correct?). However, other possible matches in scope TargetDecisionTrigger were found.
Left: [ThisChar] Right: [CharTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Char was expected.
This is not a valid place to use FROM.
Left: [ThisProv] Right: [ProvTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Prov was expected.
This is not a valid place to use FROM.
Left: [ThisTitle] Right: [TitleTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Title was expected.
This is not a valid place to use FROM.
Left: [ThisBattle] Right: [BattleTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Battle was expected.
This is not a valid place to use FROM.
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
Per a comment on the decision, FROMFROM is the war.
Code:
--- Error 1 of 1 ---
At <mod>\decisions\rip_various_decisions.txt [targeted_decisions\interfere_in_vassal_war_defender_use_favor\ai_target_filter] (Line 310, column 3):
"vassal_wars" is not a valid FilterTarget.
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
New decision filter.
Code:
--- Error 1 of 1 ---
At <mod>\decisions\rip_various_decisions.txt [targeted_decisions\break_non_aggression_pact] (Line 28, column 2):
The required "ai_target_filter" entry was not found.
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
ai_target_filter isn't needed if from_potential has ai = no, as this decision does.
 
Last edited:
Code:
--- Error 1 of 1 ---
At <mod>\decisions\rip_various_decisions.txt [targeted_decisions\break_non_aggression_pact\effect\FROM\set_truce] (Line 56, column 5):
Invalid node "set_truce" in scope CharCommand (value is: <a complex type>)
New effect in character scope, takes who = <char> and years = <int>
Code:
--- Error 1 of 1 ---
At <mod>\events\achievement_events.txt [character_event] (Line 3955, column 1):
At most 1 instance(s) of a "has_dlc" entry are allowed, but there are 2 instances.
Per Meneth, multiple has_dlc and lacks_dlc (new pretrigger) pretriggers may be used.
Code:
--- Error 1 of 1 ---
At <mod>\events\decadence_events.txt [character_event\immediate\random_potential_tribal_county\location\new_character\new_character\spawn_unit\reinforce_rate_multiplier] (Line 127, column 8):
Invalid node "reinforce_rate_multiplier" in scope <anon> (value is: 0.25)
New field in spawn_unit.
Code:
--- Error 1 of 2 ---
At <mod>\events\friends_rivals_events.txt [character_event\trigger\any_host_courtier] (Line 3438, column 3):
Invalid node "any_host_courtier" in scope CharTrigger (value is: <a complex type>)
--- Error 2 of 2 ---
At <mod>\events\friends_rivals_events.txt [character_event\immediate\random_host_courtier] (Line 3502, column 3):
Invalid node "random_host_courtier" in scope CharCommand (value is: <a complex type>)
New character scopes
Code:
--- Error 1 of 1 ---
At <mod>\events\gbc_events.txt [character_event\trigger\has_dlc] (Line 881, column 3):
"Game Book" is not a valid Dlc.
Game Book is the DLC tag for Chronicles
Code:
--- Error 1 of 1 ---
At <mod>\events\health_events.txt [character_event\is_sick] (Line 1774, column 2):
Invalid node "is_sick" in scope CharEvent (value is: yes)
New pretrigger.
Code:
--- Error 1 of 1 ---
At <mod>\events\rip_eod_events.txt [character_event\immediate\if\random_list\50\create_character\martial] (Line 872, column 7):
Invalid node "martial" in scope CharCreation (value is: 7)
"martial", like other stats Validator didn't complain about, is valid in character creation.
 
Last edited:
Version 1.16.1 seems to be confused, Every error has the following line:
Code:
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
Hmm is it easily reproducible with vanilla? It certainly doesn't seem to happen all the time. And one error that you see being valid.

Code:
--- Error 1 of 1 ---
At <mod>\common\disease\00_disease.txt [syphilis\yearly_province_pulse\random_list\90\modifier\location] (Line 1829, column 6):
Invalid node "location" in scope ProvRandomListModifier (value is: <a complex type>)
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
location should be valid inside ProvRandomListModifiers, considering how often it is used there.
Does it map to province? I don't see what it would do, wouldn't that be the same scope?

Code:
--- Error 1 of 1 ---
At <mod>\decisions\rip_various_decisions.txt [targeted_decisions\interfere_in_vassal_war_defender_use_favor\potential\FROMFROM] (Line 319, column 4):
No direct match found for FROMFROM (is the casing correct?). However, other possible matches in scope TargetDecisionTrigger were found.
Left: [ThisChar] Right: [CharTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Char was expected.
This is not a valid place to use FROM.
Left: [ThisProv] Right: [ProvTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Prov was expected.
This is not a valid place to use FROM.
Left: [ThisTitle] Right: [TitleTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Title was expected.
This is not a valid place to use FROM.
Left: [ThisBattle] Right: [BattleTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Battle was expected.
This is not a valid place to use FROM.
* called from <mod>\common\objectives\00_zeus_ambitions.txt [obj_become_council_member\abort\OR\is_inaccessible_trigger] (Line 104, column 4)
Per a comment on the decision, FROMFROM is the war.
How do you know it is a war? Is it because the filter is vassal_wars? When would FROMFROM be a war?

Code:
--- Error 1 of 1 ---
At <mod>\events\rip_eod_events.txt [character_event\immediate\if\random_list\50\create_character\martial] (Line 872, column 7):
Invalid node "martial" in scope CharCreation (value is: 7)
"martial", like other stats Validator didn't complain about, is valid in character creation.
What is the attributes clause for? It contains matrial, but I also see learning and diplomacy both in attributes and not in the Validator. Will add anyways because it sounds right.
 
Hmm is it easily reproducible with vanilla? It certainly doesn't seem to happen all the time. And one error that you see being valid.
It cleared up after I fixed a few errors.


Does it map to province? I don't see what it would do, wouldn't that be the same scope?
I think that's a question better answered by @Divine.

How do you know it is a war? Is it because the filter is vassal_wars? When would FROMFROM be a war?
Again, a question better answered by Divine. All I know is what is in the comment by the decisions:
Code:
  # The war is in FROMFROM
   interfere_in_vassal_war_attacker = {
     filter = vassal_wars
     ai_target_filter = vassal_wars

What is the attributes clause for? It contains matrial, but I also see learning and diplomacy both in attributes and not in the Validator. Will add anyways because it sounds right.
Seems to be to set base stats for a created character.
 
Code:
--- Error 1 of 1 ---
At <mod>\common\event_modifiers\00_event_modifiers.txt [guard_dogs\defensive_plot_power_modifier] (Line 775, column 2):
Invalid node "defensive_plot_power_modifier" in scope <anon> (value is: 0.15)
New modifier
 
Disease/yearly_province_pulse/ seems to just have a province in the scope.

Yes, if the filter for a targeted decision is set to vassal_wars then the game will try to create a war-scope in FROMFROM.
 
  • 1
Reactions:
Thanks for the continued support for this!

A few false positive reports:

A few recently added commands/conditions:

--- Error 1 of 1 ---
At <mod>\common\disease\00_disease.txt [bubonic_plague\timeperiod\can_outbreak\total_years_played] (Line 1012, column 4):
Invalid node "total_years_played" in scope GlobalTrigger (value is: 20)

e.g. total_years_played = 50


--- Error 1 of 1 ---
At <mod>\events\cold_winds_rising_events.txt [province_event\immediate\if\county\any_de_jure_vassal_title\controller] (Line 524, column 6):
Invalid node "controller" in scope TitleMaybeLimitCommand (value is: <a complex type>)

e.g. controller = { character = root }


--- Error 1 of 1 ---
At <mod>\events\feast_for_crows_events.txt [narrative_event\option\if\custom_tooltip\hidden_tooltip\any_allied_character] (Line 6488, column 6):
Invalid node "any_allied_character" in scope CharCommand (value is: <a complex type>)

--- Error 1 of 1 ---
At <mod>\events\high_valyrian_events.txt [character_event\immediate\random_child\random_unknown_plotter] (Line 3240, column 4):
Invalid node "random_unknown_plotter" in scope CharMaybeLimitCommand (value is: <a complex type>)

--- Error 1 of 1 ---
At <mod>\events\high_valyrian_events.txt [character_event\option\set_divine_blood] (Line 303, column 3):
Invalid node "set_divine_blood" in scope Option (value is: yes)

--- Error 1 of 1 ---
At <mod>\events\republic_trade_events.txt [character_event\option\capital_scope\FROM\new_character\if\graphical_culture] (Line 1725, column 7):
Invalid node "graphical_culture" in scope CharIfClause (value is: volantene)
This is valid as an effect and takes a culture as a scope



--- Error 1 of 1 ---
At <mod>\common\laws\ze_council_power_laws.txt [laws\justice_voting_power_1\effect\hidden_tooltip\enable_council_voting_on_issue] (Line 962, column 5):
"ransom_all" is not a valid CouncilVotingTopic.
--- Error 1 of 1 ---
At <mod>\common\council_voting\01_pragmatist_pattern.txt [pragmatist_pattern_against\break_non_aggression_pact] (Line 1042, column 2):
Invalid node "break_non_aggression_pact" in scope CouncilVotingDef (value is: <a complex type>)

Council voting can now be scripted for targetted decisions. Note that in council_voting for targetted decisions the target character is in the FROMFROMFROM scope.



--- Error 1 of 1 ---
At <mod>\events\cadet_event.txt [character_event\trigger\FROM] (Line 413, column 3):
No direct match found for FROM (is the casing correct?). However, other possible matches in scope CharTrigger were found.
Left: [ThisChar] Right: [CharTrigger] cannot be correct because of left: FROM points to <null>.
However, a Char was expected.
This scope was inferred to have scope Char, but the call at <mod>\common\on_actions\00_on_actions.txt [on_new_holder\events\cadet.10] (Line 2577, column 3) is of scope Title.
Left: [ThisProv] Right: [ProvTrigger] cannot be correct because of left: FROM points to <null>.
However, a Prov was expected.
This scope was inferred to have scope Char, but the call at <mod>\common\on_actions\00_on_actions.txt [on_new_holder\events\cadet.10] (Line 2577, column 3) is of scope Title.
Left: [ThisTitle] Right: [TitleTrigger] cannot be correct because of left: FROM points to <null>.
However, a Title was expected.
This scope was inferred to have scope Char, but the call at <mod>\common\on_actions\00_on_actions.txt [on_new_holder\events\cadet.10] (Line 2577, column 3) is of scope Title.
Left: [ThisBattle] Right: [BattleTrigger] cannot be correct because of left: FROM points to <null>.
However, a Battle was expected.
This scope was inferred to have scope Char, but the call at <mod>\common\on_actions\00_on_actions.txt [on_new_holder\events\cadet.10] (Line 2577, column 3) is of scope Title.

In on_new_holder on FROM is a title scope



--- Error 1 of 1 ---
At <mod>\events\on_action_events.txt [character_event\trigger\FROM] (Line 20125, column 3):
Invalid use of 'FROM': This scope has no FROM due to the fact that <mod>\common\on_actions\00_on_actions.txt [on_become_imprisoned_any_reason\events\45400] (Line 1634, column 3) has no scope.

In on_become_imprisoned_any_reason FROM is the imprisoner



--- Error 1 of 1 ---
At <mod>\events\on_action_events.txt [character_event\option\ai_chance\modifier\FROMFROM] (Line 19932, column 5):
No direct match found for FROMFROM (is the casing correct?). However, other possible matches in scope CharTrigger were found.
Left: [ThisChar] Right: [CharTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Char was expected.
The FROMFROM could not be determined, because the FROM of <mod>\common\cb_types\00_cb_types.txt [depose_liege\on_success\ROOT\if\character_event\id] (Line 6461, column 25) could not be determined.
This event , at <mod>\common\cb_types\00_cb_types.txt [depose_liege\on_success\ROOT\if\character_event\id] (Line 6461, column 25), must be called from somewhere else, which it is not.
Left: [ThisProv] Right: [ProvTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Prov was expected.
The FROMFROM could not be determined, because the FROM of <mod>\common\cb_types\00_cb_types.txt [depose_liege\on_success\ROOT\if\character_event\id] (Line 6461, column 25) could not be determined.
This event , at <mod>\common\cb_types\00_cb_types.txt [depose_liege\on_success\ROOT\if\character_event\id] (Line 6461, column 25), must be called from somewhere else, which it is not.
Left: [ThisTitle] Right: [TitleTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Title was expected.
The FROMFROM could not be determined, because the FROM of <mod>\common\cb_types\00_cb_types.txt [depose_liege\on_success\ROOT\if\character_event\id] (Line 6461, column 25) could not be determined.
This event , at <mod>\common\cb_types\00_cb_types.txt [depose_liege\on_success\ROOT\if\character_event\id] (Line 6461, column 25), must be called from somewhere else, which it is not.
Left: [ThisBattle] Right: [BattleTrigger] cannot be correct because of left: FROMFROM points to <null>.
However, a Battle was expected.
The FROMFROM could not be determined, because the FROM of <mod>\common\cb_types\00_cb_types.txt [depose_liege\on_success\ROOT\if\character_event\id] (Line 6461, column 25) could not be determined.
This event , at <mod>\common\cb_types\00_cb_types.txt [depose_liege\on_success\ROOT\if\character_event\id] (Line 6461, column 25), must be called from somewhere else, which it is not.

When triggering an event from a casus belli, FROMFROM is a valid scope in the event. It points to the FROM scope in the casus belli it originated.


--- Error 1 of 1 ---
At <mod>\events\on_action_events.txt [character_event\option\hidden_tooltip\liege\any_courtier\clr_character_flag] (Line 18415, column 6):
Bad name courtier_@FROMFROM
I'm not sure what this means, dynamic flags using @root @From etc were added recently


--- Error 1 of 1 ---
At <mod>\events\rip_dancing_plague_events.txt [character_event] (Line 42, column 1):
The event is set to be triggered only, but it is never called.

This event is called from the new 00_disease.txt file
 
I'll bug report it, if it's a province scope location shouldn't be either necessary or used.
 
The Validator is throwing up a very confusing report on a landed titles mod I'm working on.
"
--- Error 1 of 1 ---
Parse Failure
Path: <mod>\common\landed_titles\landed_titles.txt
Approximate location: Line -1, column -1
Error: The file was not properly closed by a closing bracket.
"
I guess I'm missing a bracket some where, but I have clue where to find the location.
 
The Validator is throwing up a very confusing report on a landed titles mod I'm working on.
"
--- Error 1 of 1 ---
Parse Failure
Path: <mod>\common\landed_titles\landed_titles.txt
Approximate location: Line -1, column -1
Error: The file was not properly closed by a closing bracket.
"
I guess I'm missing a bracket some where, but I have clue where to find the location.

The Validator's not going to tell you that - it can only tell you that the file can't be parsed, so you'll have to look for the bad bracket on your own.

My suggestion would be to use Notepad++ and switch to a language like C++ where you can easily visualize where your brackets begin and end.