IronyModManager
IronyModManager copied to clipboard
Victoria 3 Conflict Solver
Having the conflict Solver for Victoria 3 would be pretty usefull to get more mods to work together, I was disapointed when I found out that the conflict solver only works for stellaris.
As with requests for other conflict detection, there is a lack of community resources, such as the FIOS/LIOS list. If you've modded Stellaris, you're probably familiar with it. For more details on why there isn't a Conflict Solver for other games, refer to #271.
Strange that this stuff not documented for other games, is a FIOS/LIOS list absolutely required? I mean yes you do need that for the conflict solver to tell you what thing takes priority currently and what the actual final override of a thing is but can't you just let it tell you something like X is defined by mod A and B but which ones currently in use is unknown, then for the patch it could just full override everything you modified (in the process you'd have to tell it which version to use) it needs to so only on definition of any given thing exists once. You'd also have an option to leave things as is, in that case it won't touch that thing, leaving both conflicting definitions and letting whatever override happen.
Like theoretically knowing FIOS/LIOS isn't strictly required to just detect conflicts and letting you diff/merge stuff.
It's required because Irony has to know what kind of filename to generate for the output to ensure it's resolution wins in the end and forces the game to use it.
Lastly, I don't own the game and am not honestly interested in Vicky 3. Games that I own have conflict analysis to some part: Stellaris (full), Hearts of Irony 4 (readonly).
Can't you juts forcecebly win the resoltuon by doing full file override in the patch mods? ExampleMod1 overrides event A in foo.txt file ExampleMod2 overrides event A in bar.txt file both foo and bar contain lots of other events that don't conflict or that you want to keep in the default resolution. What Irony could do in Generate both a new foo.txt and bar.txt, but completely delete the definition of even A from the file from both and instead define the resolved event in patch.txt or whatever. If that isn't enough you could do a merge of some kind so that the original foo.txt and bar.txt no longer get loaded at all instead you got one merge mod containing foo.txt, bar.txt (without any definition for event A) and patch.txt
We could do that but I am not sure if Irony script parser can handle vicky 3. See the linked ticket what else is needed.
Putting this here from discord. Info provided by Bahmut | Chris author of pdx-deepl https://discord.com/channels/378985949373399040/692727670408085525/1355124353091637380:
I have collected the load order rules for both CK3 and Victoria 3. Both are the same except for one minor difference in the events
Base Rules
These are the rules that apply generally about overwriting files, types, and mods. Some of them have exceptions. Those will be listed below.
Base Game File Overwrites
everywhere
When a file has the exact same filename and path as one in the base game, it completely overwrites it.
This means if the modded file contains less or different content only that will be loaded.
Mod Overwrites
everywhere
When two mods use the same filename and path, they overwrite each other the same as base game overwrites.
What is different here is that the order inside the launcher playlist determines, which mod is loaded first.
The load order is from top to bottom. So a mod lower in the list overwrites another mod that is higher on the list if they both have conflicting files.
File and Type load order
Inside a mod or between mods that do NOT use the same filenames load order is determined in alphabetical order of files in a folder.
So if there are two files in game/common/buildings/ and they are named 00_buildings.txt and 01_more_buildings.txt the
file starting with 00 is loaded first and then the file starting with 01 is loaded after that.
If both files have different types in them, that makes no difference.
But if they have the same type (building in this case) defined, the later loaded file will win.
For example, if both files listed above have this building defined in them:
building_university = {
# Some building definition
}
The latter loaded files building definition will be used. The first one will be totally overwritten. This only applies on a type level, so any other type NOT defined in both files will be loaded normally.
Exceptions
There are a few exceptions to the rules defined above.
GUI Types
game/gui/
When a GUI type or template (NOT types) is loaded it cannot be overwritten.
So the one that is loaded first wins and is used.
Otherwise, the rules defined above still apply.
Example GUI type and template:
types gate_main_panel_types {
type gate_main_panel = default_block_window {
# Some gui stuff
}
}
template test {
# Some gui stuff
}
NOTE: The
typescontainer in the example above does not need to be unique and has no overwriting logic at all.
Events
game/events/
Events follow the same logic as GUI types in that the first one loaded wins.
So an event loaded in a file that is loaded before another file with the same event is used. Not the last one defined as other definitions.
Defines
game/common/defines/
Defines allow for replacing single defines without replacing the whole define category:
NSomeCategory = {
A_SINGLE_DEFINE = X
}
This is allowed and will only change the one define in the category.
On Actions
game/common/on_actions/
On Actions allow for appending more on_actions/events/random_events
But they don't allow for replacing the on actions's trigger/effect blocks without replacing the whole file.
This works:
# Base game on action
on_monthly_pulse = {
on_actions = {
some_custom_on_action
}
}
# Modded on action
some_custom_on_action = {
limit = {
# Trigger logic
}
effect = {
# Effect logic
}
}
This produces errors and overwrites the base game effect:
on_monthly_pulse = {
effect = {
# Effect logic
}
}
Localizations
game/localization/
To overwrite single localization keys they need to be defined in the game/localization/{language}/replace folder.
Full file overwrite still work and later loaded localization keys DO NOT overwrite the previously defined ones. But the replace folder wins over them.
DNA Data
game/common/dna_data/
Defined characters do not overwrite each other but produce duplicates.
Only file overwrites properly replace a character.
If you need any more information please ping me and I will look into them. When you have a working branch I can test and refine it for you if you want since I can program C#.
Hi all,
I am Bahmut from Discord. If you guys need any more info on this, just ping me in this Issue or via Discord.
Also I can do testing when you got something close to stable and maybe even touch up issues I find since I have already worked with C#. I simply do not have the time at the moment to fully implement the feature myself so would keep it to touch ups.
Regards,
Chris
Forgot to reply to this, I am busy with other projects therefore this is on hold for the foreseeable future.