• 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.
It would make much more sense for it to be exactly the other way around. One cannot have a non-existing culture, so it's always false, and therefore it's true that one does not have a non-existing culture.

I agree that'd be more sensible, but I remember roughly "We got a ton of nrw bugs because PDS changed it and [at the time non-existent] 'religion_group = muslim' suddenly evaluated as true" from AtE/AtEFF.
 
Has anyone figured out how to make the add_custom_history command (for wonders) work? According to the wiki, it's used in vanilla, but I can't find it anywhere, and it doesn't seem to have any effect (I'm using it inside a "wonder" scope from a decision; the wonder most definitely exists, and building upgrades and stuff seems to work just fine).
 
Has anyone figured out how to make the add_custom_history command (for wonders) work? According to the wiki, it's used in vanilla, but I can't find it anywhere, and it doesn't seem to have any effect (I'm using it inside a "wonder" scope from a decision; the wonder most definitely exists, and building upgrades and stuff seems to work just fine).

It does indeed only appear to be a province history command, where I have tested it to work. Rare are the occasions when Paradox add more history commands than regular script commands, but this appears to be one.
 
It does indeed only appear to be a province history command, where I have tested it to work. Rare are the occasions when Paradox add more history commands than regular script commands, but this appears to be one.
I'd like to once again extend a heartfelt thank-you for all the work you've done on the wiki, and all the testing to confirm stuff.
 
  • 1Like
  • 1
Reactions:
Is there a well-known limit on the number of character portraits that can appear on an event option?

From my (extensive but not complete) tests, it looks like there's a limit of 10 portraits.
  • If <= 10 portraits could be displayed, they are all displayed.
  • If >10 portraits could be displayed, NONE are displayed.
20240716134536_1.jpg20240716134451_1.jpg20240716134329_1.jpg20240716132118_1.jpg

(Technically speaking, my testing only shows that the limit is either 9 or 10, but 10 is a nice round number so I suspect it's that.)

Code:
# Audax Validator EnableCommentMetadata

namespace = eldercouncil





# Vote passes - inform Council

# Audax Validator "." Ignore_NEXT
# Prevent spurious Validator error - triggered only but never called

character_event = {
    id = eldercouncil.751
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.751.passed
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_passed = yes
        }
    }
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.751.tied
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_tied = yes
        }
    }
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.751.error
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_failed = yes
        }
    }
    
    # Audax Validator "." Ignore_NEXT
    picture = GFX_evt_k_eldercouncil
    
    # Mod Edit: Set the portrait to be the nominee, not the high chancellor
    # Audax Validator "." Ignore_NEXT
    # Prevent spurious error: event target not set
    portrait = event_target:target_nominee
    
    is_triggered_only = yes
    
    # Mod Edit: Split yes & no voters into different event options, so the user can check them
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_HighChancellor
        expd_pdxrptg_ec_show_votes_high_chancellor_only = yes
    }
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_YesVoters
        expd_pdxrptg_ec_show_votes_yes_only_without_high_chancellor = yes
    }
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_NoVoters
        expd_pdxrptg_ec_show_votes_no_only_without_high_chancellor = yes
    }
}





# Vote fails - inform Council

# Audax Validator "." Ignore_NEXT
# Prevent spurious Validator error - triggered only but never called

character_event = {
    id = eldercouncil.752
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.752.error
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_passed = yes
        }
    }
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.752.tied
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_tied = yes
        }
    }
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.752.failed
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_failed = yes
        }
    }
    # Audax Validator "." Ignore_NEXT
    picture = GFX_evt_k_eldercouncil
    
    # Mod Edit: Set the portrait to be the nominee, not the high chancellor
    # Audax Validator "." Ignore_NEXT
    # Prevent spurious error: event target not set
    portrait = event_target:target_nominee
    
    is_triggered_only = yes
    
    # Mod Edit: Split yes & no voters into different event options, so the user can check them
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_HighChancellor
        expd_pdxrptg_ec_show_votes_high_chancellor_only = yes
    }
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_YesVoters
        expd_pdxrptg_ec_show_votes_yes_only_without_high_chancellor = yes
    }
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_NoVoters
        expd_pdxrptg_ec_show_votes_no_only_without_high_chancellor = yes
    }
}

Code:
# Audax Validator EnableCommentMetadata

# Various different ways to show how the elder council members voted

expd_pdxrptg_ec_show_votes_yes_only = {
    # Audax Validator "." Ignore_NEXT
    elder_council = {
        show_scope_change = no
        any_society_member = {
            limit = { has_character_flag = ec_vote_yes }
            expd_pdxrptg_show_vote_for_this_councillor = yes
        }
    }
}

expd_pdxrptg_ec_show_votes_no_only = {
    # Audax Validator "." Ignore_NEXT
    elder_council = {
        show_scope_change = no
        any_society_member = {
            limit = { has_character_flag = ec_vote_no }
            expd_pdxrptg_show_vote_for_this_councillor = yes
        }
    }
}

expd_pdxrptg_ec_show_votes_high_chancellor_only = {
    # Audax Validator "." Ignore_NEXT
    elder_council = {
        show_scope_change = no
        any_society_member = {
            limit = { is_society_grandmaster = yes }
            expd_pdxrptg_show_vote_for_this_councillor = yes
        }
    }
}

expd_pdxrptg_ec_show_votes_yes_only_without_high_chancellor = {
    # Audax Validator "." Ignore_NEXT
    elder_council = {
        show_scope_change = no
        any_society_member = {
            limit = {
                has_character_flag = ec_vote_yes
                is_society_grandmaster = no
            }
            expd_pdxrptg_show_vote_for_this_councillor = yes
        }
    }
}

expd_pdxrptg_ec_show_votes_no_only_without_high_chancellor = {
    # Audax Validator "." Ignore_NEXT
    elder_council = {
        show_scope_change = no
        any_society_member = {
            limit = {
                has_character_flag = ec_vote_no
                is_society_grandmaster = no
            }
            expd_pdxrptg_show_vote_for_this_councillor = yes
        }
    }
}

expd_pdxrptg_show_vote_for_this_councillor = {
    if = {
        limit = { has_character_flag = ec_vote_yes }
        if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_high = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.imperialism.high
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_high = no
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_med = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.imperialism.med
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_med = no
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_low = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.imperialism.low
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_low = no
                # Audax Validator "." Ignore_NEXT
                trait = imperialist
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.imperialism.nominal
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_high = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.councilism.high
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_high = no
                # Audax Validator "." Ignore_NEXT
                ec_councilism_med = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.councilism.med
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_med = no
                # Audax Validator "." Ignore_NEXT
                ec_councilism_low = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.councilism.low
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_low = no
                # Audax Validator "." Ignore_NEXT
                trait = councilist
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.councilism.nominal
            }
        }
    }
    else_if = {
        limit = { has_character_flag = ec_vote_no }
        if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_high = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.imperialism.high
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_high = no
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_med = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.imperialism.med
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_med = no
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_low = yes
            }
            custom_tooltip = {
                text = voted_no.imperialism.low
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_low = no
                # Audax Validator "." Ignore_NEXT
                trait = imperialist
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.imperialism.nominal
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_high = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.councilism.high
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_high = no
                # Audax Validator "." Ignore_NEXT
                ec_councilism_med = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.councilism.med
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_med = no
                # Audax Validator "." Ignore_NEXT
                ec_councilism_low = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.councilism.low
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_low = no
                # Audax Validator "." Ignore_NEXT
                trait = councilist
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.councilism.nominal
            }
        }
    }
}

If this limitation is already well-known, or if others can replicate this effect, it's probably worth including on the relevant wiki page. (And, separately, I'm going to have to think about how to deal this rather-commonly-occurring limitation in the context of this event.)

On the other hand, if you have counterexamples or workarounds - I'm very keen to hear about them!
 
Is there a well-known limit on the number of character portraits that can appear on an event option?

From my (extensive but not complete) tests, it looks like there's a limit of 10 portraits.
  • If <= 10 portraits could be displayed, they are all displayed.
  • If >10 portraits could be displayed, NONE are displayed.
View attachment 1164001View attachment 1164002View attachment 1164003View attachment 1164004

(Technically speaking, my testing only shows that the limit is either 9 or 10, but 10 is a nice round number so I suspect it's that.)

Code:
# Audax Validator EnableCommentMetadata

namespace = eldercouncil





# Vote passes - inform Council

# Audax Validator "." Ignore_NEXT
# Prevent spurious Validator error - triggered only but never called

character_event = {
    id = eldercouncil.751
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.751.passed
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_passed = yes
        }
    }
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.751.tied
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_tied = yes
        }
    }
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.751.error
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_failed = yes
        }
    }
   
    # Audax Validator "." Ignore_NEXT
    picture = GFX_evt_k_eldercouncil
   
    # Mod Edit: Set the portrait to be the nominee, not the high chancellor
    # Audax Validator "." Ignore_NEXT
    # Prevent spurious error: event target not set
    portrait = event_target:target_nominee
   
    is_triggered_only = yes
   
    # Mod Edit: Split yes & no voters into different event options, so the user can check them
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_HighChancellor
        expd_pdxrptg_ec_show_votes_high_chancellor_only = yes
    }
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_YesVoters
        expd_pdxrptg_ec_show_votes_yes_only_without_high_chancellor = yes
    }
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_NoVoters
        expd_pdxrptg_ec_show_votes_no_only_without_high_chancellor = yes
    }
}





# Vote fails - inform Council

# Audax Validator "." Ignore_NEXT
# Prevent spurious Validator error - triggered only but never called

character_event = {
    id = eldercouncil.752
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.752.error
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_passed = yes
        }
    }
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.752.tied
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_tied = yes
        }
    }
    desc = {
        # Audax Validator "." Ignore_NEXT
        text = eldercouncil.752.failed
        trigger = {
            # Audax Validator "." Ignore_NEXT
            ec_vote_failed = yes
        }
    }
    # Audax Validator "." Ignore_NEXT
    picture = GFX_evt_k_eldercouncil
   
    # Mod Edit: Set the portrait to be the nominee, not the high chancellor
    # Audax Validator "." Ignore_NEXT
    # Prevent spurious error: event target not set
    portrait = event_target:target_nominee
   
    is_triggered_only = yes
   
    # Mod Edit: Split yes & no voters into different event options, so the user can check them
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_HighChancellor
        expd_pdxrptg_ec_show_votes_high_chancellor_only = yes
    }
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_YesVoters
        expd_pdxrptg_ec_show_votes_yes_only_without_high_chancellor = yes
    }
    option = {
        name = ExpdPdxRptg_ElderCouncilVoteResultAnnouncement_NoVoters
        expd_pdxrptg_ec_show_votes_no_only_without_high_chancellor = yes
    }
}

Code:
# Audax Validator EnableCommentMetadata

# Various different ways to show how the elder council members voted

expd_pdxrptg_ec_show_votes_yes_only = {
    # Audax Validator "." Ignore_NEXT
    elder_council = {
        show_scope_change = no
        any_society_member = {
            limit = { has_character_flag = ec_vote_yes }
            expd_pdxrptg_show_vote_for_this_councillor = yes
        }
    }
}

expd_pdxrptg_ec_show_votes_no_only = {
    # Audax Validator "." Ignore_NEXT
    elder_council = {
        show_scope_change = no
        any_society_member = {
            limit = { has_character_flag = ec_vote_no }
            expd_pdxrptg_show_vote_for_this_councillor = yes
        }
    }
}

expd_pdxrptg_ec_show_votes_high_chancellor_only = {
    # Audax Validator "." Ignore_NEXT
    elder_council = {
        show_scope_change = no
        any_society_member = {
            limit = { is_society_grandmaster = yes }
            expd_pdxrptg_show_vote_for_this_councillor = yes
        }
    }
}

expd_pdxrptg_ec_show_votes_yes_only_without_high_chancellor = {
    # Audax Validator "." Ignore_NEXT
    elder_council = {
        show_scope_change = no
        any_society_member = {
            limit = {
                has_character_flag = ec_vote_yes
                is_society_grandmaster = no
            }
            expd_pdxrptg_show_vote_for_this_councillor = yes
        }
    }
}

expd_pdxrptg_ec_show_votes_no_only_without_high_chancellor = {
    # Audax Validator "." Ignore_NEXT
    elder_council = {
        show_scope_change = no
        any_society_member = {
            limit = {
                has_character_flag = ec_vote_no
                is_society_grandmaster = no
            }
            expd_pdxrptg_show_vote_for_this_councillor = yes
        }
    }
}

expd_pdxrptg_show_vote_for_this_councillor = {
    if = {
        limit = { has_character_flag = ec_vote_yes }
        if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_high = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.imperialism.high
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_high = no
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_med = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.imperialism.med
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_med = no
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_low = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.imperialism.low
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_low = no
                # Audax Validator "." Ignore_NEXT
                trait = imperialist
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.imperialism.nominal
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_high = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.councilism.high
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_high = no
                # Audax Validator "." Ignore_NEXT
                ec_councilism_med = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.councilism.med
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_med = no
                # Audax Validator "." Ignore_NEXT
                ec_councilism_low = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.councilism.low
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_low = no
                # Audax Validator "." Ignore_NEXT
                trait = councilist
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_yes.councilism.nominal
            }
        }
    }
    else_if = {
        limit = { has_character_flag = ec_vote_no }
        if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_high = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.imperialism.high
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_high = no
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_med = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.imperialism.med
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_med = no
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_low = yes
            }
            custom_tooltip = {
                text = voted_no.imperialism.low
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_imperialism_low = no
                # Audax Validator "." Ignore_NEXT
                trait = imperialist
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.imperialism.nominal
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_high = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.councilism.high
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_high = no
                # Audax Validator "." Ignore_NEXT
                ec_councilism_med = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.councilism.med
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_med = no
                # Audax Validator "." Ignore_NEXT
                ec_councilism_low = yes
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.councilism.low
            }
        }
        else_if = {
            limit = {
                # Audax Validator "." Ignore_NEXT
                ec_councilism_low = no
                # Audax Validator "." Ignore_NEXT
                trait = councilist
            }
            custom_tooltip = {
                # Audax Validator "." Ignore_NEXT
                text = voted_no.councilism.nominal
            }
        }
    }
}

If this limitation is already well-known, or if others can replicate this effect, it's probably worth including on the relevant wiki page. (And, separately, I'm going to have to think about how to deal this rather-commonly-occurring limitation in the context of this event.)

On the other hand, if you have counterexamples or workarounds - I'm very keen to hear about them!

10 matches what I can recall from a few years ago. CleanSlate has an adjustment in faction ultimatum events so that they will always show portraits, rather than showing nothing if the faction in question has more than 10 members, which makes it seem like there's hardly any power behind the ultimatum.
 
10 matches what I can recall from a few years ago. CleanSlate has an adjustment in faction ultimatum events so that they will always show portraits, rather than showing nothing if the faction in question has more than 10 members, which makes it seem like there's hardly any power behind the ultimatum.
For your cleanslate adjustment, did you manage to get more than 10 to show? (Or did you do something like "pick 10 randomly"?)
 
For your cleanslate adjustment, did you manage to get more than 10 to show? (Or did you do something like "pick 10 randomly"?)

No, I just used count = 10, to ensure that at least some portraits always show up. For these specific events, it's only for the tooltip, anyway, so it doesn't change the outcome of the events.
 
No, I just used count = 10, to ensure that at least some portraits always show up. For these specific events, it's only for the tooltip, anyway, so it doesn't change the outcome of the events.
Fair enough.

Related question: Can you think of a good way to display all members of a society so that the player can easily browse them?
  • I find it very hard to browse the member list in the society tab - especially for public societies where I'm not a member.
    • Eg: In the base game, if you want to find a member of a monastic society with excellent education to tutor your kids.
  • I was previously thinking of simply shoving all members into an event option so you could click on their portraits while keeping the event on-screen... but I guess I now know that's not an option!
    • I guess you could theoretically still use this method, but you would also need some convoluted code to ensure that only 10 members are picked for each option. And some logic to ensure members can't be inserted in more than one option. And some kind of looping to handle societies with >40 members (4 options * 10 characters per option = 40).
 
Fair enough.

Related question: Can you think of a good way to display all members of a society so that the player can easily browse them?
  • I find it very hard to browse the member list in the society tab - especially for public societies where I'm not a member.
    • Eg: In the base game, if you want to find a member of a monastic society with excellent education to tutor your kids.
  • I was previously thinking of simply shoving all members into an event option so you could click on their portraits while keeping the event on-screen... but I guess I now know that's not an option!
    • I guess you could theoretically still use this method, but you would also need some convoluted code to ensure that only 10 members are picked for each option. And some logic to ensure members can't be inserted in more than one option. And some kind of looping to handle societies with >40 members (4 options * 10 characters per option = 40).

Use the character finder with suitable search terms, e.g. the Community of Saint Basil's members can be found with "Saint" and "Basil" (though "Community" doesn't work).
 
I didn't know you could search for society members in the character finder. I'm still learning things about this game after all this time. Thanks for the tip.

I found these two buttons for the first time the other week. I've only been playing since a couple of weeks after release...

1721190808592.png
 
  • 2Haha
  • 1Like
Reactions:
I'm seeing an unexpected blocker for the "Ask Liege for Land [for unlanded son/daughter]" decision:

ck2_1.png


The failed condition contains the following under the custom_tooltip (the OR will be cleaned up since it doesn't do anything due to the previous is_adult).

Code:
any_child = {
    is_female = no
    employer = {
        character = PREV
    }
    is_adult = yes
    is_heir = no
    prisoner = no
    is_incapable = no # Works here!
    has_inheritance_blocker = no
    NOT = { trait = bastard }
    OR = {
        is_adult = yes
        AND = {
            ROOT = {
                is_any_bureaucrat_trigger = no
            }
            FROM = {
                is_any_bureaucrat_trigger = no
            }
        }
    }
}

As Svend II of Denmark just after the Stamford Bridge start, I assure you I have several adult sons that aren't non-legitimate bastards, landed, or my heir, e.g.

ck2_2.png


What am I missing?
 
I'm seeing an unexpected blocker for the "Ask Liege for Land [for unlanded son/daughter]" decision:

View attachment 1164922

The failed condition contains the following under the custom_tooltip (the OR will be cleaned up since it doesn't do anything due to the previous is_adult).

Code:
any_child = {
    is_female = no
    employer = {
        character = PREV
    }
    is_adult = yes
    is_heir = no
    prisoner = no
    is_incapable = no # Works here!
    has_inheritance_blocker = no
    NOT = { trait = bastard }
    OR = {
        is_adult = yes
        AND = {
            ROOT = {
                is_any_bureaucrat_trigger = no
            }
            FROM = {
                is_any_bureaucrat_trigger = no
            }
        }
    }
}

As Svend II of Denmark just after the Stamford Bridge start, I assure you I have several adult sons that aren't non-legitimate bastards, landed, or my heir, e.g.

View attachment 1164924

What am I missing?
any_child = { employer = { character = PREV } } seems dodgy. You have a child, who is employed by himself?!

I think it should probably be any_child = { employer = { character = PREVPREV } }

(On the other hand, if this logic is identical to the base game and it works in the base game, then maybe I'm misunderstanding.)
 
any_child = { employer = { character = PREV } } seems dodgy. You have a child, who is employed by himself?!

I think it should probably be any_child = { employer = { character = PREVPREV } }

(On the other hand, if this logic is identical to the base game and it works in the base game, then maybe I'm misunderstanding.)

Unfortunately not it; here's how it looks with just PREV and the custom_tooltip disabled:

ck2_3.png


Edit: And here's with the OR removed:

ck2_4.png


I can't see anything that fails, but it clearly does.
 
I can only recommend commenting out all or parts of the script until it behaves as expected, then slowly add parts back in.

I will be trying that... though outside comments (" # Works here!"; we normally use a different check in Tianxia to not have fake incapacitation by a regent not count for e.g. incapable suicides), one line that shows up as green ("has_regent = yes # Any and all regencies"), and using "employer = { character = PREV }" rather than "vassal_of = ROOT is_ruler = no" (reverting that doesn't seem to change anything...) it's pure CleanSlate:

The full decision, as currently implemented in the development version I'm testing with (after noticing the bug in our latest release):
Code:
ask_for_land = {
        filter = liege
        ai_target_filter = liege
        ai_check_interval = 12

        is_high_prio = yes

        only_playable = yes

        from_potential = {
            OR = {
                has_ambition = obj_land_for_son
                has_ambition = obj_land_for_daughter
            }

            higher_real_tier_than = BARON
        }

        allow = {
            FROM = {
                prisoner = no
                in_revolt = no
                is_incapable = no # Works here!
                is_inaccessible_trigger = no
                has_regent = no # Any and all regencies

                trigger_if = {
                    limit = { has_ambition = obj_land_for_son }

                    custom_tooltip = {
                        text = tooltip_land_for_son

                        # Should match obj_land_for_son trigger

                        any_child = {
                            is_female = no
                            employer = {
                                character = PREV
                            }
                            is_adult = yes
                            is_heir = no
                            prisoner = no
                            is_incapable = no # Works here!
                            has_inheritance_blocker = no
                            NOT = { trait = bastard }
                        }
                    }
                }
                trigger_else = {
                    custom_tooltip = {
                        text = tooltip_land_for_daugther

                        # Should match obj_land_for_daughter trigger

                        any_child = {
                            is_female = yes
                            employer = {
                                character = PREV
                            }
                            is_adult = yes
                            is_heir = no
                            prisoner = no
                            is_incapable = no # Works here!
                            has_inheritance_blocker = no
                            NOT = { trait = bastard }
                        }
                    }
                }
            }

            ROOT = {
                has_regent = no
                in_revolt = no

                NOT = {
                    has_opinion_modifier = {
                        name = requested_land
                        who = PREV
                    }
                }

                any_demesne_title = {
                    real_tier = COUNT
                    can_be_given_away = yes

                    location = {
                        show_scope_change = no

                        is_capital = no
                    }
                }
            }
        }

        effect = {
            FROM = {
                show_scope_change = no

                prestige = -20
            }

            custom_tooltip = {
                text = ask_for_land_tooltip

                opinion = {
                    name = requested_land
                    who = FROM
                    years = 2
                }

                character_event = {
                    id = ZE.6012
                    days = 3
                }
            }
        }

        ai_will_do = {
            factor = 0.1

            mult_modifier = {
                factor = 2
                FROM = { trait = proud }
            }

            mult_modifier = {
                factor = 2
                FROM = { trait = stubborn }
            }

            mult_modifier = {
                factor = 2
                FROM = { trait = greedy }
            }

            mult_modifier = {
                factor = 2
                FROM = { trait = ambitious}
            }

            mult_modifier = {
                factor = 0.5
                FROM = { trait = content }
            }

            mult_modifier = {
                factor = 0.5
                FROM = { trait = shy}
            }

            mult_modifier = {
                factor = 0.5
                FROM = { trait = craven}
            }

            mult_modifier = {
                factor = 0.5
                FROM = { trait = humble }
            }
        }
    }

The Validator also doesn't report anything wrong with the file, nor does error.log.
 
I will be trying that... though outside comments (" # Works here!"; we normally use a different check in Tianxia to not have fake incapacitation by a regent not count for e.g. incapable suicides), one line that shows up as green ("has_regent = yes # Any and all regencies"), and using "employer = { character = PREV }" rather than "vassal_of = ROOT is_ruler = no" (reverting that doesn't seem to change anything...) it's pure CleanSlate:

The full decision, as currently implemented in the development version I'm testing with (after noticing the bug in our latest release):
Code:
ask_for_land = {
        filter = liege
        ai_target_filter = liege
        ai_check_interval = 12

        is_high_prio = yes

        only_playable = yes

        from_potential = {
            OR = {
                has_ambition = obj_land_for_son
                has_ambition = obj_land_for_daughter
            }

            higher_real_tier_than = BARON
        }

        allow = {
            FROM = {
                prisoner = no
                in_revolt = no
                is_incapable = no # Works here!
                is_inaccessible_trigger = no
                has_regent = no # Any and all regencies

                trigger_if = {
                    limit = { has_ambition = obj_land_for_son }

                    custom_tooltip = {
                        text = tooltip_land_for_son

                        # Should match obj_land_for_son trigger

                        any_child = {
                            is_female = no
                            employer = {
                                character = PREV
                            }
                            is_adult = yes
                            is_heir = no
                            prisoner = no
                            is_incapable = no # Works here!
                            has_inheritance_blocker = no
                            NOT = { trait = bastard }
                        }
                    }
                }
                trigger_else = {
                    custom_tooltip = {
                        text = tooltip_land_for_daugther

                        # Should match obj_land_for_daughter trigger

                        any_child = {
                            is_female = yes
                            employer = {
                                character = PREV
                            }
                            is_adult = yes
                            is_heir = no
                            prisoner = no
                            is_incapable = no # Works here!
                            has_inheritance_blocker = no
                            NOT = { trait = bastard }
                        }
                    }
                }
            }

            ROOT = {
                has_regent = no
                in_revolt = no

                NOT = {
                    has_opinion_modifier = {
                        name = requested_land
                        who = PREV
                    }
                }

                any_demesne_title = {
                    real_tier = COUNT
                    can_be_given_away = yes

                    location = {
                        show_scope_change = no

                        is_capital = no
                    }
                }
            }
        }

        effect = {
            FROM = {
                show_scope_change = no

                prestige = -20
            }

            custom_tooltip = {
                text = ask_for_land_tooltip

                opinion = {
                    name = requested_land
                    who = FROM
                    years = 2
                }

                character_event = {
                    id = ZE.6012
                    days = 3
                }
            }
        }

        ai_will_do = {
            factor = 0.1

            mult_modifier = {
                factor = 2
                FROM = { trait = proud }
            }

            mult_modifier = {
                factor = 2
                FROM = { trait = stubborn }
            }

            mult_modifier = {
                factor = 2
                FROM = { trait = greedy }
            }

            mult_modifier = {
                factor = 2
                FROM = { trait = ambitious}
            }

            mult_modifier = {
                factor = 0.5
                FROM = { trait = content }
            }

            mult_modifier = {
                factor = 0.5
                FROM = { trait = shy}
            }

            mult_modifier = {
                factor = 0.5
                FROM = { trait = craven}
            }

            mult_modifier = {
                factor = 0.5
                FROM = { trait = humble }
            }
        }
    }

The Validator also doesn't report anything wrong with the file, nor does error.log.

The problem appears to be in employer = {}. I think it doesn't tooltip correctly, referring to the wrong character and showing how it evaluates for that wrong character, making it seem as if it evaluates correctly, while actually being false. Using employer = { character = PREVPREV } and employer = { character = ROOT_FROM } together works, even if the first one appears false in the tooltip.

This game is a mess.
 
  • 1
Reactions:
Oh CK2, you're a broken mess, but we love you anyway.

At some point, I will eventually migrate over to CK3, and it will be, shall we say, interesting to see what messes they've fixed for that compared to #2 - and of course, what new messes they've added.
 
  • 2Haha
Reactions:
The problem appears to be in employer = {}. I think it doesn't tooltip correctly, referring to the wrong character and showing how it evaluates for that wrong character, making it seem as if it evaluates correctly, while actually being false. Using employer = { character = PREVPREV } and employer = { character = ROOT_FROM } together works, even if the first one appears false in the tooltip.

I've tested it with PREVPREV, and that indeed works as expected.

Thanks for figuring it out (and you also, @jonjowett)! I suppose I should know better than to trust tooltips...

This game is a mess.

Definitely; it's always "fun" to find something new that doesn't behave as expected...
 
  • 2Like
Reactions: