• 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.
this is an amazing tool. thank you for taking time to work on it.

Out of curiosity, would it be possible to make this able to check save files? Spending hours editing a save file only to find out you made a mistake somewhere is annoying... being able to just run a check to find the errors in a save would be much better than going through every change you made scanning for them....
 
v1.3 RC7 has been released.

Download here: http://www.mediafire.com/?2wiwekvto0mhi2l
Thanks, that solved my issues with it refusing to check some mods.
However, one request: Would it be possible to have it not list the errors of dependencies? When I'm checking PB+SWMH I really don't care about the errors in PB or SWMH, just the compatch.
 
Program won't run right for me. Installed latest NET framework and made sure it was in repair. Tried d/ling more than once, and both 1.2 and 1.3 versions. Tried installing to other directories, etc. WHen it first starts I can enter a path but then nothing. When closing program it crashes.

Log of Audax.Validator, version 1.3 RC7 [1.3.6.0]

Current Time: 4/14/2013 7:16:49 PM
.NET Version: 4.0.30319.296
OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1
Current Culture: en-US
Current UI Culture: en-US
Command Line: "D:\Downloads\Audax.Validator v1.3 RC7\Audax.Validator\App\Audax.Validator.exe"
Processor Count: 8
Current Directory: D:\Downloads\Audax.Validator v1.3 RC7\Audax.Validator\App
Machine Name: [machine_name <*******-**>]
System Directory: C:\Windows\system32
User Name: [user_name <*******>]
User Domain Name: [user_domain_name <*******-**>]
User Interactive: True
Tick Count: 00:07:41.8900000
Shutdown Started: False

ENVIRONMENT VARIABLES
COMPUTERNAME: [machine_name <*******-**>]
HOMEPATH: \Users\[user_name <*******>]
LOCALAPPDATA: C:\Users\[user_name <*******>]\AppData\Local
PSModulePath: C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PROCESSOR_ARCHITECTURE: AMD64
CommonProgramW6432: C:\Program Files\Common Files
CommonProgramFiles(x86): C:\Program Files (x86)\Common Files
ProgramFiles(x86): C:\Program Files (x86)
PROCESSOR_LEVEL: 6
windows_tracing_flags: 3
LOGONSERVER: \\[machine_name <*******-**>]
USERNAME: [user_name <*******>]
HOMEDRIVE: C:
USERPROFILE: C:\Users\[user_name <*******>]
SystemRoot: C:\Windows
TEMP: C:\Users\[user_name <*******>]\AppData\Local\Temp
PUBLIC: C:\Users\Public
ALLUSERSPROFILE: C:\ProgramData
FP_NO_HOST_CHECK: NO
APPDATA: C:\Users\[user_name <*******>]\AppData\Roaming
ProgramData: C:\ProgramData
PATHEXT: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
OS: Windows_NT
CommonProgramFiles: C:\Program Files\Common Files
PROCESSOR_IDENTIFIER: Intel64 Family 6 Model 30 Stepping 5, GenuineIntel
ComSpec: C:\Windows\system32\cmd.exe
SystemDrive: C:
PROCESSOR_REVISION: 1e05
ProgramFiles: C:\Program Files
NUMBER_OF_PROCESSORS: 8
windows_tracing_logfile: C:\BVTBin\Tests\installpackage\csilogfile.log
TMP: C:\Users\[user_name <*******>]\AppData\Local\Temp
ProgramW6432: C:\Program Files
Path: C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\ATI\ATI.ACE\Core-Static;C:\Program Files (x86)\Windows Live\Shared;D:\PSP\Plugins;D:\ATI\Driver\ATI.ACE\Core-Static;d:\python;D:\ATI\thedriver\ATI.ACE\Core-Static
USERDOMAIN: [user_domain_name <*******-**>]
windir: C:\Windows

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

StatusLog > Beginning initialization...
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog >
StatusLog > ec) EXCEPTION CONTEXT
StatusLog >
StatusLog >
StatusLog >
StatusLog > ERROR
StatusLog > Audax.Validator.ItemNotFoundInScopeException: Item " %Name" was not found in this scope.
StatusLog > at Audax.Validator.Scope.Resolve[T](String name)
StatusLog > at Audax.Validator.GameValidator..ctor(CFilePath path, Boolean gamePathSet)
StatusLog > at Audax.Validator.ValidationManager.ParseGameFiles()
StatusLog > Since there were problems with initial loading, validation cannot continue.
 
Program won't run right for me. Installed latest NET framework and made sure it was in repair. Tried d/ling more than once, and both 1.2 and 1.3 versions. Tried installing to other directories, etc. WHen it first starts I can enter a path but then nothing. When closing program it crashes.

Log of Audax.Validator, version 1.3 RC7 [1.3.6.0]

Current Time: 4/14/2013 7:16:49 PM
.NET Version: 4.0.30319.296
OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1
Current Culture: en-US
Current UI Culture: en-US
Command Line: "D:\Downloads\Audax.Validator v1.3 RC7\Audax.Validator\App\Audax.Validator.exe"
Processor Count: 8
Current Directory: D:\Downloads\Audax.Validator v1.3 RC7\Audax.Validator\App
Machine Name: [machine_name <*******-**>]
System Directory: C:\Windows\system32
User Name: [user_name <*******>]
User Domain Name: [user_domain_name <*******-**>]
User Interactive: True
Tick Count: 00:07:41.8900000
Shutdown Started: False

ENVIRONMENT VARIABLES
COMPUTERNAME: [machine_name <*******-**>]
HOMEPATH: \Users\[user_name <*******>]
LOCALAPPDATA: C:\Users\[user_name <*******>]\AppData\Local
PSModulePath: C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PROCESSOR_ARCHITECTURE: AMD64
CommonProgramW6432: C:\Program Files\Common Files
CommonProgramFiles(x86): C:\Program Files (x86)\Common Files
ProgramFiles(x86): C:\Program Files (x86)
PROCESSOR_LEVEL: 6
windows_tracing_flags: 3
LOGONSERVER: \\[machine_name <*******-**>]
USERNAME: [user_name <*******>]
HOMEDRIVE: C:
USERPROFILE: C:\Users\[user_name <*******>]
SystemRoot: C:\Windows
TEMP: C:\Users\[user_name <*******>]\AppData\Local\Temp
PUBLIC: C:\Users\Public
ALLUSERSPROFILE: C:\ProgramData
FP_NO_HOST_CHECK: NO
APPDATA: C:\Users\[user_name <*******>]\AppData\Roaming
ProgramData: C:\ProgramData
PATHEXT: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
OS: Windows_NT
CommonProgramFiles: C:\Program Files\Common Files
PROCESSOR_IDENTIFIER: Intel64 Family 6 Model 30 Stepping 5, GenuineIntel
ComSpec: C:\Windows\system32\cmd.exe
SystemDrive: C:
PROCESSOR_REVISION: 1e05
ProgramFiles: C:\Program Files
NUMBER_OF_PROCESSORS: 8
windows_tracing_logfile: C:\BVTBin\Tests\installpackage\csilogfile.log
TMP: C:\Users\[user_name <*******>]\AppData\Local\Temp
ProgramW6432: C:\Program Files
Path: C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\ATI\ATI.ACE\Core-Static;C:\Program Files (x86)\Windows Live\Shared;D:\PSP\Plugins;D:\ATI\Driver\ATI.ACE\Core-Static;d:\python;D:\ATI\thedriver\ATI.ACE\Core-Static
USERDOMAIN: [user_domain_name <*******-**>]
windir: C:\Windows

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

StatusLog > Beginning initialization...
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog > Warning: DynamicError not found: InvalidChildError
StatusLog >
StatusLog > ec) EXCEPTION CONTEXT
StatusLog >
StatusLog >
StatusLog >
StatusLog > ERROR
StatusLog > Audax.Validator.ItemNotFoundInScopeException: Item " %Name" was not found in this scope.
StatusLog > at Audax.Validator.Scope.Resolve[T](String name)
StatusLog > at Audax.Validator.GameValidator..ctor(CFilePath path, Boolean gamePathSet)
StatusLog > at Audax.Validator.ValidationManager.ParseGameFiles()
StatusLog > Since there were problems with initial loading, validation cannot continue.

Can you download this: http://www.mediafire.com/download.php?n1zzvcrvk0nyd71

and post the log.txt again like you did in the above post?
 
this is an amazing tool. thank you for taking time to work on it.

Out of curiosity, would it be possible to make this able to check save files? Spending hours editing a save file only to find out you made a mistake somewhere is annoying... being able to just run a check to find the errors in a save would be much better than going through every change you made scanning for them....

This would not be too hard but it would take some time. It depends on if there is enough interest about it. So, if someone wants this they should comment about it.
 
Thanks, that solved my issues with it refusing to check some mods.
However, one request: Would it be possible to have it not list the errors of dependencies? When I'm checking PB+SWMH I really don't care about the errors in PB or SWMH, just the compatch.

Does it not work right now when you choose "Show main mod errors"?
 
This would not be too hard but it would take some time. It depends on if there is enough interest about it. So, if someone wants this they should comment about it.

sadly i dont think there is much interest... i did a search of the thread before posting and only one other person mentioned checking saves.... but hey i hope i'm wrong. If i knew anything about it id just ask your permission to do it myself, but well, i would have no clue how to go about it... here's hoping, and thanks for both the response and the willingness to do the work!
 
I downloaded this thingie to track down a particularly evasive bug in my little home-brewn mod, and it's awesome! :)

Found a tiny bug though: If I click the "more info" button on an error post, then fixes the error, clicks recompile so it shows no error, then click recompile again a fatal error occures.
 
I downloaded this thingie to track down a particularly evasive bug in my little home-brewn mod, and it's awesome! :)

Found a tiny bug though: If I click the "more info" button on an error post, then fixes the error, clicks recompile so it shows no error, then click recompile again a fatal error occures.

Hmm, I fixed a bug that sounds similar, hopefully that was what you found.
 
ec) EXCEPTION CONTEXT
ec) Validation Task: Buildings
Validation Key: Buildings
Validation Type: Audax.Validator.TypeExtension.DeclarativeValidatorJob



ERROR
System.InvalidOperationException: Nullable object must have a value.
at System.Nullable`1.get_Value()
at Audax.Validator.ContextValidatorSystem.EventId.TryParseNamespaceEventId(String idString, String& Namespace, Int32& id)
at Audax.Validator.ContextValidatorSystem.EventId..ctor(String idString, Boolean enableNamespaces)
at Audax.Validator.ContextValidatorSystem.CallSearchPath.SearchForCalls(Document doc, CallSearchMethod searchMethod)
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.ContextFileCrawlerPrototype.CallSearch.ProcessPath(CFilePath path, Document doc, IList`1 stringSearches, Boolean enableNamespaces)
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.ContextFileCrawlerPrototype.FindCalls(IList`1 callSearch, IList`1 stringSearches, CFilePath path, Document doc)
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.ContextFileCrawlerPrototype.ProcessPath(CFilePath path, IList`1 idSearch, IList`1 callSearch, IList`1 stringSearches, IList`1 eventScopes)
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.ContextFileCrawlerPrototype.GetWorker()
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.get_worker()
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.LoadAll()
at Audax.Validator.ContextValidatorSystem.ContextValidatorInfo.Load()
at Audax.Validator.ContextValidatorSystem.ContextValidatorInfo.Validate(Context c, String key, ElementNode node, NodeFlags flags)
at Audax.Validator.ContextValidatorSystem.ContextValidatorConstraint.Validate(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.Constraint.ElementValidate(Context c, ElementNode node)
at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.Constraint.ElementValidate(Context c, ElementNode node)
at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.Constraint.ElementValidate(Context c, ElementNode node)
at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.Constraint.ElementValidate(Context c, ElementNode node)
at Audax.Validator.TypeExtension.DeclarativeValidatorJob.DeclarativeValidatorWorker.Validate(Context c)
at Audax.Validator.TypeExtension.DeclarativeValidatorJob.ValidateOverride()
at Audax.Validator.ValidatorJobBase.Validate()
at Audax.Validator.ValidatorJob.Validate()
at Audax.Validator.GameValidator.Validate(Action onEachValidatorCompleteAction)


This pops up every time I use the Validator, regardless of which version and regardless of what I'm scanning.
 
ec) EXCEPTION CONTEXT
ec) Validation Task: Buildings
Validation Key: Buildings
Validation Type: Audax.Validator.TypeExtension.DeclarativeValidatorJob



ERROR
System.InvalidOperationException: Nullable object must have a value.
at System.Nullable`1.get_Value()
at Audax.Validator.ContextValidatorSystem.EventId.TryParseNamespaceEventId(String idString, String& Namespace, Int32& id)
at Audax.Validator.ContextValidatorSystem.EventId..ctor(String idString, Boolean enableNamespaces)
at Audax.Validator.ContextValidatorSystem.CallSearchPath.SearchForCalls(Document doc, CallSearchMethod searchMethod)
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.ContextFileCrawlerPrototype.CallSearch.ProcessPath(CFilePath path, Document doc, IList`1 stringSearches, Boolean enableNamespaces)
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.ContextFileCrawlerPrototype.FindCalls(IList`1 callSearch, IList`1 stringSearches, CFilePath path, Document doc)
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.ContextFileCrawlerPrototype.ProcessPath(CFilePath path, IList`1 idSearch, IList`1 callSearch, IList`1 stringSearches, IList`1 eventScopes)
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.ContextFileCrawlerPrototype.GetWorker()
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.get_worker()
at Audax.Validator.ContextValidatorSystem.ContextFileCrawler.LoadAll()
at Audax.Validator.ContextValidatorSystem.ContextValidatorInfo.Load()
at Audax.Validator.ContextValidatorSystem.ContextValidatorInfo.Validate(Context c, String key, ElementNode node, NodeFlags flags)
at Audax.Validator.ContextValidatorSystem.ContextValidatorConstraint.Validate(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.Constraint.ElementValidate(Context c, ElementNode node)
at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.Constraint.ElementValidate(Context c, ElementNode node)
at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.Constraint.ElementValidate(Context c, ElementNode node)
at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(Context c)
at Audax.Validator.TypeCore.Constraint.ElementValidate(Context c, ElementNode node)
at Audax.Validator.TypeExtension.DeclarativeValidatorJob.DeclarativeValidatorWorker.Validate(Context c)
at Audax.Validator.TypeExtension.DeclarativeValidatorJob.ValidateOverride()
at Audax.Validator.ValidatorJobBase.Validate()
at Audax.Validator.ValidatorJob.Validate()
at Audax.Validator.GameValidator.Validate(Action onEachValidatorCompleteAction)


This pops up every time I use the Validator, regardless of which version and regardless of what I'm scanning.

This should be fixed in the next version.
 
Thanks.
I think it is about time for me to just list every error report and false positive that annoys me in some way :p

At <mod>\history\characters\norwegian.txt [102531\1066.9.14\effect\spawn_unit[3]\province] (Line 835, Column 5):
"995" is not a valid ThisProv, LandProvince, or ThisChar.
spawn_unit works fine in sea provinces, assuming only ships are spawned. It might be possible to spawn soldier on ships as well, but I have not checked.

At <mod>\history\characters\PB.txt [9999999] (Line 1, Column 1):
No birth found for character.
No idea why I'm getting this, since I've got a birth-date defined:
1.1.1={
birth="1.1.1"
}

At <mod>\events\PB_historical.txt [letter_event[1]\option[1]\hidden_tooltip\k_rum\de_jure_liege] (Line 683, Column 14):
"0" is not a valid ThisChar, ThisTitle, or AnyTitle.
0 is definitely a valid value for the de_jure_liege command.

At <mod>\events\PB_various.txt [character_event[3]\option[1]] (Line 243, Column 2):
Invalid node "revoke_law" in scope Option (value is: the_crusade_target)
revoke_law works fine in the Option scope.

At <mod>\events\PB_various.txt [letter_event] (Line 719, Column 1):
The event is set to be triggered only, but it is never called.
The event is triggered via an ambition.

At <mod>\events\plot_events.txt [letter_event[30]\option\reverse_opinion\who] (Line 2525, Column 4):
"FROMFROM" is not a valid ThisChar, OpinionClauseDefinedTypes, ThisProv, or ThisTitle.
reverse_opinion should work just fine with FROMFROM.

At <mod>\common\static_modifiers.txt [family_palace] (Line 423, Column 1):
Invalid node "retinuesize" in scope <anon> (value is: -100000)
retinuesize is perfectly valid from a holding scope.

At <mod>\common\objectives\00_plots.txt [plot_seize_trade_post\chance\modifier[10]\NOT\ROOT] (Line 1903, Column 5):
Invalid node "holder_scope" in scope ProvTrigger (value is: <a complex type>)
The scope for type = rep_trade_posts CBs isn't really a province scope, but a holding scope. Thus holder_scope is valid.

At <mod>\common\landed_titles\landed_titles.txt [b_ziani] (Line 6470, Column 1):
The string b_ziani was not found in localization.
The patrician baronies don't need localization as they use the dynasty's name.

That should cover near everything.
On another note, is it just me or is validation quite slow now? Before it'd take about 40s for all of PB, now it takes 95s. Even accounting for PB growing in size it seems that the Validator is slower than it used to be.
 
@Meneth: Fixed them, except:

At <mod>\events\plot_events.txt [letter_event[30]\option\reverse_opinion\who] (Line 2525, Column 4):
"FROMFROM" is not a valid ThisChar, OpinionClauseDefinedTypes, ThisProv, or ThisTitle.
reverse_opinion should work just fine with FROMFROM.
- This accepts FROMFROM, but for some reason it doesn't think FROMFROM is valid in this specific situation, such as the FROMFROM not existing. This may point to a bug somewhere else

At <mod>\common\landed_titles\landed_titles.txt [b_ziani] (Line 6470, Column 1):
The string b_ziani was not found in localization.
The patrician baronies don't need localization as they use the dynasty's name.
- Hmm, sounds kind of hard to determine :/

On another note, is it just me or is validation quite slow now? Before it'd take about 40s for all of PB, now it takes 95s. Even accounting for PB growing in size it seems that the Validator is slower than it used to be.
- Yeah, it's received more checks and stuff so it's likely to be slower.
 
Rather annoying false-positive:
At <mod>\events\waylit_siege_events.txt [character_event[5]\option[1]\FROMFROM\holder_scope\limit\at_location] (Line 1708, Column 6):
"FROMFROM" is not a valid ThisProv, ThisChar, or Province.

Getting that with "FROM" as well, despite the events working perfectly fine.

Another false positive: "num_of_baron_titles" is a valid condition, just like count, duke, etc.
 
Last edited: