• 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.

Crusader Kings 3 Dev Diary #30 - Event Scripting

Welcome, comrades, to another dev diary! Today, we’ll be taking a look at the structure of an event in CK3, how they’re assembled in script, and how they differ from CK2.

Anatomy of an Event
The core of a standard character event is almost certainly quite familiar to you already: we have a title, a description, typically a portrait, and one or more options along the bottom.

In script, however, we’ve changed a few things around, looking to improve functionality, readability, and general script hygiene over time. Here’s a comparison of the start of an event in CK2 vs. CK3:
001.png


The first change you’ll notice is that we’ve swapped the event type and the event ID: an event is now created by a namespace (still defined at the top of each file) and unique ID, and the type defined inside the event, rather than the inverse. This means that you can now still read event IDs after folding the events themselves!

002.png


Next, is that we’ve changed how triggered text works. In CK2, this was a really useful tool for ensuring that flavour was localised appropriately to the player’s situation, and let us make events very broadly applicable whilst still feeling unique. It could, however, get a bit cumbersome, since we had no method for triggered text to be easily mutually exclusive, occasionally leading to situations like this:
003.png


Not the worst in the world, but pretty chonky for what we actually want it to do.

In CK3, we can cut this down by using a first_valid block inside triggered text blocks (as in the first image shown), picking the first entry from a list which meets a set of criteria. This means that, instead of having to make sure triggered text blocks are always mutually exclusive according to a trigger (and one which tends to increase in complexity along with the number of triggered texts), we can just order our preferred text logically according to fairly simple triggers.

For instance, if I have a triggered text block where the copy is different for a French character, an Ashari character, and a character who’s over eighty years old, with a fallback for anyone who doesn’t fit into those categories, I’d script something like the following:
004.png


This will then automatically proceed down the list. A French character would see one thing, a non-French Ashari would see another thing, a non-French non-Ashari who’s over eighty would see a third thing, and everyone else would see a fourth. This makes it incredibly easy to add new context-sensitive copy to both event descriptions and titles.

A further minor point, but as triggered text is now also kept within the body of a superior block, it’s far easier to sort on the fly: no matter how much triggered text you have, it’s just one click to collapse the body in your file editor of choice, not a dozen or more. When minimising clicks, every little bit helps!

Event Themes & Backgrounds
A couple of notable absences in the CK3 format are the picture & border blocks.

Well, that’s with good reason! These have mostly been subsumed into the new event theming system, which you can see in the very first CK3 script example above.

Themes are what decide on the event icon displayed in the top-left, helping to group together broadly-thematic sets of events, and to let the player know what they can expect an event to relate to. They also give us a default appropriate image background (which, itself, sets the lighting used on the character portraits), which will change according to your situation, and different sets of ambient SFX.

Backgrounds and theme icons can be overridden as necessary via a manual line of script if we feel like we’ve got a more appropriate one to show, too, so although the system is set-up to reduce the amount of work that goes in to adding extra flavour to each event, we still have total control over what flavour we actually include should we want it.

Needless to say, event themes are fully scriptable: you can mod in whatever icon, default background, character model lighting, & ambient SFX you like, as well as create and adjust themes with ease.

Portraits & Animations
The good stuff! Portraits in the new system are, very surprisingly, somewhat more dynamic than in CK2, and any given event can have between 0 and 5 total portraits present. Of these, two are fully animated (positioned to the left and the right, respectively), and three are headshots lined up evenly along the bottom of the event. These can be used in any combination you like to get just the right look for an event.

005.png


The left and right portraits can use any of a fairly wide array of animations created for release. Headshots are not animated, instead allowing you to visualise ancillary characters mentioned in the event’s description.

On Actions for All!
All events come from somewhere, and, in CK2 (especially earlier in the title’s life cycle), this was often done through the Mean Time To Happen system, which let us define roughly how long an event would take to fire in (typically) months. Unfortunately, when balancing extremely large numbers of events against each other, the flexibility of this system becomes more of a disadvantage than anything else, making it difficult to govern how frequently an event should spawn without particularly stringent triggers. It also caused a lot of weird statistical anomalies due to working off of pure probabilities, and absolutely tanked performance.

Over CK2’s long life, we started to move more towards triggering events via on_actions, small hooks in code attached to features or regular pulses that activate events (and, if necessary, effects) whenever that hook is called. These take a bit more work to balance, but give us much more control over how and when events are called, as well as making tweaking such significantly easier, and are super fast performance-wise.

For CK3, we use entirely on_actions to fire events. There’s quite an array hooked up from code, allowing us to trigger events either when a specific action occurs in the world (e.g., when a character is born) or on a regular pulse (e.g., every five years). These can be set to go off every time that on_action fires, or placed in a weighted list of potential events that might fire (in which case, weight multipliers still apply and support the usual factors and such).

One major improvement over CK2’s on_actions (other than a more thorough, rationalised system of use, which I think is very exciting but I also appreciate that other people lead much more interesting lives than me and may have stricter standards) is the addition of scripted on_actions! These allow us (and, of course, you!) to create and hook up on_actions entirely in script that behave as regular on_actions, instead of always having to rely on the hard-coded on_actions. Scripted on_actions then behave exactly as coded on_actions, acting as a complex of weighted & unweighted events/effects, just called from somewhere in the accessible-script rather than the inaccessible-code.

For instance, say I’ve made a new set of events about reconciliation after a civil war, neighbours learning to live side by side with each other after fighting for opposite lieges, that type of thing, and I want to hook it up to happen whenever a civil war ends. All I have to do to set up that flow is add something like this to the relevant war end effects:
006.png


And then create a file including this in the appropriate directory:
007.png


Anywhere that you can script an effect, you can script a reference to a new (or existing scripted) on_action.

The Immediate Block & You
A major new addition to CK scripting, which we use with extreme regularity in the immediate block, is the scripted list!

These allow us to sort through various groups, pick out relevant characters matching a set of criteria, and then sort within the list of relevant characters only with ease.

For instance, let’s say I want to grab every ornery old man from amongst my vassals and courtiers, I’d write something vaguely thus:
008.png


And then, I want to pick out the two angriest and orneriest from amongst them so that I can have them get into an argument in an event or what have you:
009.png


Sorted! I can then refer to these two characters in my localisation, apply effects to them, make them portrait characters, etc., as needed. You may note our cool new alternative_limit functionality: these are limits which are checked if the limit immediately above them fails.

That said, we’re all about minimising unnecessary maintenance and nipping potential bugs before they exist, and this script should still be setting off alarm bells, what with calling two separate lists that use the same conditions, which are, themselves, part of a separate scripted trigger.

There are a few ways we could solve this, but let’s go for showing off some new functionality, with the ordered_in_list effect:
010.png


Ordered_in_list takes a list, and, using a system called script_maths (which we’ll hopefully have time to talk about another time), assigns numerical values to items in that list. It then applies any effects in its block as normal to, by default, the highest valued item in the list (though, as here, we can tell it to apply its effects to any number of items in the list). Here, we were sorting a relatively small amount of list items by a fairly limited set of factors, but this sorting functionality can be as complex and as extensive as you require.

In other immediate block-related news, we’ve also made it easier to save scopes (formerly event targets, which you can see a bit of in the above example), and variables, and customarily use this block to define musical stings for maximum drama. Standard immediate block functionality (being executed before the event is displayed) is unchanged, and visible effects executed in the Immediate will be shown under a “Has Happened” header in all event option tooltips.

Options: Giving the AI Personality & Stressing Out Players
Finally, options. Options behave similarly to CK2, with a minimum of one per visible event and each option requiring a text label, but otherwise allowing you to enter any and various effects you fancy.

011.png


The two main additions to this area that you’ll notice are a drastically expanded use of ai_chance, and, fairly commonly, stress_impact.

AI chance, as in CK2, governs the approximate chance that an NPC character will pick that option. In CK3, we’re making much more extensive use of this block, and of our exposed ai_value_modifiers (building a personality for each character based off how much/little of each value they have, in turn derived mostly from their traits) to ensure that characters act in accordance with their personality as much as possible by weighing almost all event options up or down based on appropriate ai_value_modifiers. The block still takes other triggers as well, so we can have the AI prefer an option more or less based on traits, if they’re at war, if the option relates to a rival, etc.

Stress_impact, meanwhilst, is how we organise the new stress mechanic, which you may remember from some diaries ago! Don’t stress (*ahem*) if you don’t: stress is, in a nutshell, a measure of negative effects that your character gains when performing actions that run contrary to their personality (e.g., a compassionate character does not enjoy torturing people).

We check for that here, by filling out the stress_impact block with any personality traits relevant to picking a particular option, and using the scripted stress_impact values. Due to sorcerous automagic, we can combine any number of stresses gained and lost in the stress_impact block, and it’ll be calculated on an event option into one number.

You can also add stress as an ordinary effect, outside of the stress_impact block, in which case it will not combine. If desired, you can even add multiple stress impact blocks, which will only combine the individual stress modifiers, or you can omit the block entirely. Whatever floats your scripting-boat.

And, with that, we come to the end of another dev diary. I’ll be around for a couple of hours to answer any questions you might have, and we look forward to seeing you ne-

A-aren’t you going to cover Triggers?
Ha, you fell for my cunning plot-twist. Hands up anyone who noticed the stealthy trigger spoiler in an earlier screenshot, you win exactly one internet point!

For everyone else, let’s have that screenshot again:
012.png


Now, a quick recap: scripted triggers in CK2 were a way of grouping a long list of requirements together under a single reference, and then referring to that reference when needing to check things.

For instance, say I have two places in an event where I need to check 20+ conditions: the event will be perfectly functional if I script all those conditions out twice, but what if someone in the future updates one set of triggers but not the other? Instant source of bugs. Now, what if I have to check those triggers more than twice, or across multiple events, or, for maximum-sadism, across multiple events in different files?

As you can imagine, that rapidly devolves into chaos. However, we don’t want to use less complex triggers, partially because that makes the title worse and less fun for everyone (is it really CK without ludicrous amounts of specificity?), and partially because that’s only reducing the scale of the problem, not fixing it.

Instead, we’d create a scripted trigger, which is the list of triggers written out once in a file that can be referenced by other files. Then, in any spot needing to check those triggers, we call the scripted trigger, which checks its contents. Any time the triggers need updating or fixing, simply fix the scripted trigger once, and, typically, all subsequent places that check the scripted trigger have been fixed by proxy also. Instant maintenance savings, immediate huge reductions in bug potential!

However, in CK2, these scripted triggers had to be stored inside a specific folder in /common, separate from the events (and other script) that they referenced. This may not sound like a huge deal, but it adds a bit of extra leg-work to creating and maintaining scripted triggers, and only really gives you a huge list of scripted triggers, some of which may be used only a few times in a couple of places.

In CK3, we’re improving on this by adding inline scripted triggers, meaning scripted triggers that can be written directly into the file that uses them, provided they are only used in that file. For more utilitarian scripted triggers that need to be used across multiple files, the old folder system still works. This lets us split up major and minor scripted triggers, and use scripted triggers (and, for that matter, scripted effects) significantly more thoroughly throughout the title, making it markedly easier for us (and you!) to create script that doesn’t compromise on complexity or detail whilst still being easy to maintain.

And with that, we come to the actual end of the dev diary. We look forward to seeing you next week!
 
  • 87
  • 60Like
  • 33Love
  • 5
  • 1Haha
  • 1
Reactions:
Databases? Does this mean that CK3 has actual legit database connections? or am I just misunderstanding things and you meant to refer to the Commons Folder where scripted triggers are stored now?
I'm afraid I just mean the plaintext files in the /common folder. They're nominally databases...
 
  • 10
  • 5
Reactions:
Is long-term gameplay now viable for players with low spec laptops? Ck2 runs well the first hundred years but after that it runs as well as a hundred year old horse. Probably has something to do with the amount of courtiers. Will the game have the same performance at the beginning of the game until the very end?
:( Afraid I'm not really a great person to answer hardware questions. I understand the vague principles of the magic thinking rock, but its nuances are arcane to me.

Cool, though I hope error logging is improved, in CK2 crash's are bascilly impossible to diagnose by modders without trial and error as the error logs are basically completely useless and never give any hint as to what area the error occurred in.
I like to think so! I'm unsure how much extra logging detail we'll have available at launch, but we have improved debug_log, debug_log_date, & debug_log_scopes effect commands from CK2's, so debugging is pretty customisable from a script-perspective. I've also used the debugger a lot both as QA & as a Content Designer, and I generally find it to be very helpful and precise most of the time. :) As ever, though, these things are a process, so we'll be adding to it as patches go on!
 
  • 9Like
  • 9
Reactions:
Interesting diary. Can we hear modders first look opinion, how flexible new event system (in comparison with old)? Is other part of games fully moddable too? Can new 3D-models be exported and used in game (more precise question - will we see Warhammer overhauls with shyed orcs)? How it'd works with new genetic system? Or more about it in next dev diaries?
 
  • 2Like
Reactions:
These ordered_lists and the math will be quite nice. And the first_valid trigger is neat as well. Is there something similar for the scene background?
Also, is it possible to save a list somewhere? Say I have a list of the "most important unlanded random courtiers in the world", could I reference it in different events, potentially adding "important" characters to it?

Is there an "overwrite/update" functionality for events? In Ck2, when 2 mods try to access the same file to do a minor change in one line, it breaks compatiblity. Would be nice if you could specify an event with "overwrite = true", or something like that in a seperate file.

And speaking of all those fancy new triggers, commands and on_actions: What are your favourite new additions when compared to CK2?
 
  • 2Like
  • 1
Reactions:
Alright it seems that Rise To Power will be coming to CK3 after all. Great job guys I cannot wait to try them out!
One question and request before release though...If there is one thing that I miss the most from coming to CK2 from Stellaris are the "Timed Flags" I.e "set_timed_country_flag" as an actual "command/effect".
Are you guys going to port that feature over from Stellaris? Pleaaaaassssseeeee???? (And no those "had_flag" conditions checks dont count :p
 
Last edited:
  • 3Like
  • 1
Reactions:
Finally, options. Options behave similarly to CK2, with a minimum of one per visible event
Wait a minute. Does that mean that they can have more than 4 options (or that the "more" option to cycle through is automatically generated)?
 
  • 2Like
  • 2
Reactions:
Very cool. Are events still limited to a max of 4 options? Later games aren't, so I suppose we can have more in CK2, but I'd like to be sure :p

Interesting diary. Can we hear modders first look opinion, how flexible new event system (in comparison with old)?
Hard to say without delving into it, but it seems to be more flexible than CK2.

The new descriptions look a lot like custom_localization keys, and they're nice to play with so that's an improvement.
Custom on_actions are very nice, I think it could replace some "tombola" systems we had in CK2 (that's what societies use to give you content).
I don't know how I feel about having scripted triggers defined within the event file itself, as I much prefer to have them all within the common/scripted_triggers folder itself. But that's a personal preference.
alternative_limit look a like preferred_limit, not sure exactly what the difference is however.
ordered_in_list looks like it has quite a lot of potential, so that's nice.
It seems that the ai_chance is much easier to play with, which is a very good improvement.

Edit: Completely forgot about the first change, the event type and its id have exchanged their place. That's really cool. The event id is much more important than the event type, and so having the later more obvious than the former was a bit strange.


Some changes will take some time to get used to, but overall I'm rather excited about it. So kudos Paradox!
 
  • 2Like
  • 2
  • 1Love
Reactions:
Is other part of games fully moddable too? Can new 3D-models be exported and used in game (more precise question - will we see Warhammer overhauls with shyed orcs)? How it'd works with new genetic system? Or more about it in next dev diaries?
;) I'm afraid that, for now, it is a mystery is the only answer I can give to that.

These ordered_lists and the math will be quite nice. And the first_valid trigger is neat as well. Is there something similar for the scene background?
Also, is it possible to save a list somewhere? Say I have a list of the "most important unlanded random courtiers in the world", could I reference it in different events, potentially adding "important" characters to it?

Is there an "overwrite/update" functionality for events? In Ck2, when 2 mods try to access the same file to do a minor change in one line, it breaks compatiblity. Would be nice if you could specify an event with "overwrite = true", or something like that in a seperate file.

And speaking of all those fancy new triggers, commands and on_actions: What are your favourite new additions when compared to CK2?
There isn't currently a first_valid system for anything but triggered copy, as far as I know, I'm afraid. As for lists, certainly! We've got scripted lists (per the diary), temporary lists (existing for a single block of script), & global lists (as you're wanting here).

Currently, we do not have an overwrite/update function. As for which is my favourite, gosh, difficult. I didn't get a chance to show it off this dev diary, but I think I'd have to say random_in_list is the one that I personally get the most use out of! Filter through a load of appropriate characters for an event, add them to a list, then pick a random character from that list according to a set of weights I tweak to my preference for interest.

Want to grab all your vassals, courtiers, close family, then pick out the one with the most and largest claims? Boom, simple, easy, robust. Want to do the same but instead find the one that has the best murder/attempted murder secret against someone important to you? Same list, different weights, only marginally more difficult. Want to find the character in that list with the most missing body-parts and infectious diseases? Easy, doable. :D Lots of flexibility, and let's you put in just so much drama tailored to your personal preference.

Alright it seems that Rise To Power will be coming to CK3 after all. Great job guys I cannot wait to try them out!
One question and request before release though...If there is one thing that I miss the most from coming to CK2 from Stellaris are the "Timed Flags".
Are you guys going to port that feature over from Stellaris? Pleaaaaassssseeeee????
I'm afraid I've not scripted in Stellaris, particularly, I'm firmly a medieval kind of chap, but we do have specific or random time limits available on any set_variable command, which includes flag functionality et al, if that's what you mean.

Wait a minute. Does that mean that they can have more than 4 options (or that the "more" option to cycle through is automatically generated)?
*WINNER!* ^^ Waiting for this one to come up. Although the "more" option is not automatically generated, we do not have a hard limit of four options, though the base title certainly prefers to remain at four options or less without a more cycle.

Very cool. Are events still limited to a max of 4 options? Later games aren't, so I suppose we can have more in CK2, but I'd like to be sure :p
...
The new descriptions look a lot like custom_localization keys, and they're nice to play with so that's an improvement.
...
Some changes will take some time to get used to, but overall I'm rather excited about it. So kudos Paradox!
:) Per my above answer, nope! No 4-option max. Certainly a valid confirmation ask!

We also have custom_loc keys, for the record :D.

:) Glad you like it.
 
Last edited:
  • 11
  • 4Like
  • 2Love
Reactions:
On modding wise im more intrested how much hard coding is still in game?

How much room we have mod define files. This question is mostly based on CK2 define file where Define in definefile there were defined 2 modifers for divine blood. Lunatic and inbreed but there were no room to add other modifers, like weak, strong, harelip, dwarf or anything else. Also in same case alot of other modifers were limited, will it stays same way in CK3 or its avaible for full moding.
 
  • 1Like
Reactions:
Speaking of technical topics...

Will there be any major changes to AI character behavior?

Specifically, will AI characters be able to make more complex long-term judgments, such as deciding that Lord X is becoming too powerful in the realm and therefore needs to have hooks dug up against him to keep him under control?
 
  • 3Like
  • 1
Reactions:
:) Per my above answer, nope! No 4-option max. Certainly a valid confirmation ask!

We also have custom_loc keys, for the record :D.

:) Glad you like it.
Quick question for the custom_localization! Currently the keys don't seem to be evaluated until the game is started. That means that putting a custom_loc key as the name of a trait or a title will result in the key not being localized until the game starts.
It is visible in the ruler selection window for the custom titles (something like [Root.GetKing]), and for the traits in the ruler designer (something like [Root.GetCraven]).

Is it still the case? It's very much an edge case but the question sprung into my mind :p
 
  • 2Like
Reactions:
I'm afraid I've not scripted in Stellaris, particularly, I'm firmly a medieval kind of chap, but we do all specific or random time limits on any set_variable command, which includes flag functionality et al, if that's what you mean.

Yup that'll do! Thank you!
 
  • 2Like
Reactions:
I also hope that certain things are no longer hardcoded. Like the instant game over for unplayable government types, whereby they cannot be made playable by mods, and unplayable barons.
Want to find the character in that list with the most missing body-parts and infectious diseases? Easy, doable.
Certainly a very common desire. :) But these list types seem really great. I remember cycle through characters with a given trait with a while loop and flags because there was no corresponding list and the trait scope only gives a random member. That was buggy as hell, so I'm very glad to see these powerful tools.

Are the ai_values the same ones as in CK2? And what's their value range? I never used them in CK2 because I didn't knew what a rationality of x means.

So apparently we might have another dev diary on scripted math and one on 3d and gui modding?

Do you use a GUI of some kind to manage all these, and visualize the relationships? Or are they all hand-crafted in an editor?
As far as I know they only use Sublime. I've no idea how they manage to keep track of all the thousands of different event IDs, although the new name spaced event header might help a little.

In an earlier dev diary about life styles there was the perk that prolongs your life for another year in case you die of old age. I wonder how that is handled in script. Is there a "death = not_today" command for the on_death on_action? ;)
 
  • 1
Reactions:
On modding wise im more intrested how much hard coding is still in game?

How much room we have mod define files. This question is mostly based on CK2 define file where Define in definefile there were defined 2 modifers for divine blood. Lunatic and inbreed but there were no room to add other modifers, like weak, strong, harelip, dwarf or anything else. Also in same case alot of other modifers were limited, will it stays same way in CK3 or its avaible for full moding.
Well I mean there is still plenty of hard coded things in the sense we have a lot of compiled C++ code into the executable obviously but as the DD here mentions we've aimed at putting a lot of things in script so it can be modded, for your specific mention there of modifiers we've tried to generalise them more than before with auto registering modifiers based on database entries for some of them, those ones you mention in CK2 were just rather old ones to solve a specific use case in CK2.

In an earlier dev diary about life styles there was the perk that prolongs your life for another year in case you die of old age. I wonder how that is handled in script. Is there a "death = not_today" command for the on_death on_action? ;)
Its actually pretty simple, when the gods of RNG decide its time for them to pass on we trigger an on action for getting a second chance at life, that then fires an event notifying you that your time is up and then sends an event roughly a year later which does then kill you properly. Modifying the RNG to try and get it to give you an extra year and in advance know that year would be way to difficult due to the well... R for randomness RNG so this was the solution I went with to keep it simple and effective.
 
  • 8
Reactions:
On modding wise im more intrested how much hard coding is still in game?

How much room we have mod define files. This question is mostly based on CK2 define file where Define in definefile there were defined 2 modifers for divine blood. Lunatic and inbreed but there were no room to add other modifers, like weak, strong, harelip, dwarf or anything else. Also in same case alot of other modifers were limited, will it stays same way in CK3 or its avaible for full moding.
;) Hugely sorry, but I'm afraid I'm going to have to keep mum on a lot of that for the moment, as my dev diary was only cleared to discuss events, and defines aren't one of my areas of expertise.

Modifiers (character, county, house, etc.) are fully moddable, though I'm not quite sure how much of an improvement we have over CK2 in that regard, as CK2 was already fairly flexible there. There are a whole slew of new modifier effects to use, especially for new CK3 features, but as those have to be created manually by Code, I'm afraid I can't promise the Moon on that one.

Speaking of technical topics...

Will there be any major changes to AI character behavior?

Specifically, will AI characters be able to make more complex long-term judgments, such as deciding that Lord X is becoming too powerful in the realm and therefore needs to have hooks dug up against him to keep him under control?
Afraid that's not quite my bailiwick. :) As a CD, I do work with the AI, but my province is mostly teaching it to use standard functionality in the short (and occasionally mid) term, so I can't really give you a decent answer.

Quick question for the custom_localization! Currently the keys don't seem to be evaluated until the game is started. That means that putting a custom_loc key as the name of a trait or a title will result in the key not being localized until the game starts.
It is visible in the ruler selection window for the custom titles (something like [Root.GetKing]), and for the traits in the ruler designer (something like [Root.GetCraven]).

Is it still the case? It's very much an edge case but the question sprung into my mind :p
If I'm understanding you correctly, then actually, yes! We use this functionality pretty extensively, so there are a lot of traits which will have a default/fallback name, and then a customised name that changes with the circumstances (for instance, the trait that script refers to as "viking" has a default name of "Raider", but if you have the longships innovation, it changes to "Viking").

Do you use a GUI of some kind to manage all these, and visualize the relationships? Or are they all hand-crafted in an editor?
Hand-crafted in the editor, m'friend. Which editor varies according to personal taste (as long as it works), but the most common ones by far are Sublime & Notepad++.

Are the ai_values the same ones as in CK2? And what's their value range? I never used them in CK2 because I didn't knew what a rationality of x means.

So apparently we might have another dev diary on scripted math and one on 3d and gui modding?
I believe we have a couple of new ones, though I think it's outside my purview to discuss which ones. The range is -100 to +100.

:p Afraid I can make no promises on future dev diary content, just that there'll be more dev diaries.
 
  • 7
Reactions:
How moddable are on_actions? Can you mod so that events are called from a weekly pulse instead of monthly and monthly pulse instead of yearly (like a hypothetical Lion King mod, where most characters would grow up in 3 years and live for a decade or two)?
 
  • 1Like
Reactions:
If I'm understanding you correctly, then actually, yes! We use this functionality pretty extensively, so there are a lot of traits which will have a default/fallback name, and then a customised name that changes with the circumstances (for instance, the trait that script refers to as "viking" has a default name of "Raider", but if you have the longships innovation, it changes to "Viking").
So if you pick the Raider trait in the RD (if there's one in CK3, I can't remember exactly) it'll show as Raider (since it's the fallback name) and not [Root.GetRaider] (that's the current behavior in CK2)? Neat!
 
Not really following most of this DD, since I'm not a modder and don't do scripting. However, from what little I do now, it looks like Events in CKIII will be much more moddable and much less prone to unspeciuficed errors than they were in CKII, which is good for everyone.
 
Not a dev diary that will be relevant to most people, but for modders - especially those who work a lot with events - this is a very fascinating one. The greater flexibility with, for instance, random_in_list as the equivalent of random_courtier, is appreciated.

A few questions, if you don't mind (probably a lot more but this is off the top of my head and skimming through my current code for my CK2 modding work):

- Is event_target still around and has there been any important changes to how it works?
- Is there still a basic yearly, bi-yearly, every five years, etc. on_actions in vanilla, as well as a a startup on_actions in vanilla that will allow us to trigger events at the start of the game?
- Are pre-triggers still in?
- On a related vein, in CK2 a common scripting sleight of hand was to have the Pope trigger certain maintenance or narrative events since he's always around - will CK3 use a similar system or is there something in-built to take care of those kinds of situations?
- Does the code for creating characters differ in CK3 from CK2 significantly, and/or has any new functionalities been added to it?

Thanks again for a good dev diary and answering questions so far, it's very enlightening for us modders.
 
  • 2
Reactions: