Dev Diary #55: Modding Improvements
Good afternoon, all
I’m here today with a short dev diary on some upcoming improvements to moddability. We’re not quite ready yet to make any announcements about upcoming features and so on, but we thought you might be interested in hearing about some modding improvements we’ve been working on.
In an upcoming patch which I will from now on call 1.3.X (due to the exact version number being unknown at this time), we’ve spent a bit of time on making the game more moddable based on requests we’ve had from the modding community. In particular we would like to thank the Modding Co-op for coming up with a curated list of requested functionality. The curation of this list made it easy for us to get a good overview of what functionality the community would like, and limited to those requests that’d benefit a lot of modders rather than just a handful. As the amount of time we could spend on modding improvements this time around was rather limited, having an already curated list to pick from was great.
From that list we picked some of the simpler requests; things that’d require relatively minimal code and would only affect mods. We will likely implement more from this list in the future, though our list for 1.3.X is unlikely to expand.
In addition to implementing some functionality based on these requests, we’ve also had some conversations with modders, and looked at some common pain points. We can’t address most of them right now, but one we noticed is that a number of mods use the DummyMale and DummyFemale characters for a lot of things they weren’t meant for. This was a result of lacking functionality, which we have now introduced in 1.3.X.
With the need for this dummy-character removed, we will be deprecating it. That means that it’ll continue to work 1.3.X which introduces the replacement functionality, but that they will be largely removed in 1.4 to ensure that script and code are more maintainable in the long-term.
Another bit of functionality that we suspect will be of major interest is that of same-sex concubinage. Before 1.3, same-sex concubinage was unintentionally possible to mod in, but had the potential to cause a variety of errors. In 1.3 we explicitly restricted it in code as part of fixing a concubine-related bug, believing it’d never been possible at all. Since then, we’ve made changes to properly support same-sex concubinage, and it will come alongside other modding improvements in 1.3.X.
Further, we plan to support same-sex marriage for mods in 1.4. Due to larger technical risks surrounding it, it was not feasible to include that in 1.3.X; we need more time to test it to ensure that this support does not introduce bugs in the vanilla game. We’re really looking forward to being able to support more diverse experiences with this mod support.
Mods add so much to the experience of our games, and moddability has been something we’ve considered throughout CK3’s development. As a former CK2 modder myself, it’s great to see all the things the modding community is producing.
Finally, here’s all the modding improvements we plan to release in 1.3.X:
– User Modding: Add CloseGameView data function so mods can close specific in game views.
– User Modding: Add GetTraitFromGroup and GetTraitGroupLevel data functions on Character.
– User modding: make_concubine now supports same-sex concubinage
– User Modding: Add GetTraitGroup( ‘tag’ ) and Trait.GetGroup data functions to get trait groups.
– User Modding: Add HasTrait and HasTraitFromGroup data functions to Character.
– User modding: Added data functions GetTraitsWithFlag and GetTraitsWithoutFlag
– User modding: Added datamodel GetTraits on TraitGroup
– User modding: Added effect deactivate_holy_site
– User modding: Added effect remove_dynasty_perk
– User modding: Added effect remove_innovation = innovation_key
– User modding: Added effect set_army_location
– User modding: Added effects clear_traits and copy_traits
– User modding: Added effects set_age and change_age
– User modding: Added list builder x_culture_global
– User modding: Added trigger has_innovation_flag
– User modding: Added trigger perks_in_<lifestyle>, to query how many perks exist in a given lifestyle (rather than how many a specific character has)
– User modding: spawn_army will now only spawn levies if scripted to do so
– User modding: Add GetGlobalVariable and GetGlobalList data functions for getting data saved from script.
– User modding: Add MakeScopeValue, MakescopeFlag, and MakeScopeBool to create scope objects out of primitive types directly since they are not automatically creatable via the MakeScope member on complex types like Character.MakeScope.
– User modding: Add ScriptValue data function to scope objects which will evaluate a script value just with that scope object as root.
– User modding: Made the Localize data function allow the key it references to also call other data functions in it like SelectLocalization does.
– User modding: Add AddList data function for GuiScope, it is to add_to_list what AddScope is to save_scope_as.
That’s all for today! I’m excited to see what the modding community will do with these added pieces of functionality.