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

CirclePete

Major
71 Badges
Aug 27, 2016
504
286
  • Crusader Kings II: Charlemagne
  • Europa Universalis IV: Mare Nostrum
  • Knights of Honor
  • Crusader Kings II
  • Crusader Kings II: Sword of Islam
  • Crusader Kings II: Sunset Invasion
  • Crusader Kings II: The Republic
  • Crusader Kings II: Rajas of India
  • Crusader Kings II: The Old Gods
  • Crusader Kings II: Sons of Abraham
  • Crusader Kings II: Legacy of Rome
  • Hearts of Iron IV: Death or Dishonor
  • Imperator: Rome
  • Europa Universalis IV: Golden Century
  • Shadowrun: Hong Kong
  • Shadowrun: Dragonfall
  • Shadowrun Returns
  • Europa Universalis IV: Dharma
  • Stellaris: Distant Stars
  • Europa Universalis IV: Rule Britannia
  • Stellaris: Humanoids Species Pack
  • Hearts of Iron IV: Expansion Pass
  • Europa Universalis IV: Cradle of Civilization
  • Hearts of Iron 4: Arms Against Tyranny
  • Hearts of Iron IV: Expansion Pass
  • Prison Architect
  • Stellaris: Ancient Relics
  • Stellaris: Lithoids
  • Hearts of Iron IV: La Resistance
  • Stellaris: Federations
  • Imperator: Rome - Magna Graecia
  • Crusader Kings III
  • Battle for Bosporus
  • Europa Universalis 4: Emperor
  • Stellaris: Necroids
  • Stellaris: Nemesis
  • Hearts of Iron IV: By Blood Alone
  • Hearts of Iron IV: No Step Back
  • Hearts of Iron IV: Cadet
  • Europa Universalis IV
  • Teleglitch: Die More Edition
  • Europa Universalis IV: El Dorado
  • Crusader Kings II: Way of Life
  • Pillars of Eternity
  • Europa Universalis IV: Common Sense
  • Crusader Kings II: Horse Lords
  • Europa Universalis IV: Cossacks
  • Crusader Kings II: Conclave
  • Stellaris
  • Hearts of Iron IV: Colonel
Well like some other CK3 players who played the Byzantine Emperor, I felt like the number of members who were forced into a faction while having no interest in being part of them (and then viraly forcing new members, who would then force other members...) was a little too high, so I came up with some alternative designs, that I have implemented or am currently implementing, and I would like to know what others might think of them.

  1. Nerfed Vanilla interaction
    Quite the same as Vanilla: the interaction of using influence to force someone into a faction, is still present, but the cost is scaled with the willingness of the recipient to join this faction and the frequency is scaled with the member's commitment to the faction.
  2. Advocate for Faction (a)
    The 'Force to Join Faction' interaction is reverted to its previous strong hook only version. Influence can be used to 'Advocate for Faction' instead: any member of any faction can spend influence to boost the chance of the recipient to join their faction, up to 3 times for each faction.
  3. Advocate for Faction (b)
    Similar to above version, but if another faction is advocated to the recipient, they lose the modifier for the previous faction, at the cost of the cumulated influence spent by the previous faction
I'm going to post details about these designs, in this thread, but also share the implementation, and possibly some screenshots
 
  • 1Like
Reactions:
Nerfed Vanilla interaction

The most simple version:

Recipients that really do not want to be in the faction, are simply not valid. But even without being under this blocking threshold, there are intermediate ones that increase the cost in influence.
Can be forced - Vanilla-Nerfed.png

From 28 potential members who can be forced into the faction to just 13

Not enough influence.png
Can not be influenced.png

In some cases, you just lack some influence, in others your fellow vassal simply don't want to hear about your faction

An AI actor will similarly be less enthusiastic if their commitment to the faction is low (especially if they've been forced into the faction).

Additionally, the duration of the coercion increases with the level of influence of the actor, starting with 3 years for the lowest level (impotent), to 10 years for the highest one (imperious).
Persuasive - 4 years.png
Controlling - 6 years.png

A persuasive character will force his fellow vassal in his faction for a shorter duration than a controlling character

Implementation:

It relies simply on using the trigger:
Code:
join_faction_chance = {
    target = scope:actor.joined_faction
    value >= some_threshold        # works with >, =, <, <=
}

In the case of a faction member, if the target is his currently joined faction, this is a useful scripted trigger:
Code:
minimum_faction_commitment_trigger = {
    is_a_faction_member = yes
    join_faction_chance = {
        target = joined_faction
        value >= $VALUE$
    }
}

The current values I use are the following ones:
Code:
recruiting_for_faction_minor_reluctance_value = 5
recruiting_for_faction_medium_reluctance_value = -45
recruiting_for_faction_major_reluctance_value = -95
recruiting_for_faction_monumental_reluctance_value = -145
recruiting_for_faction_blocking_reluctance_value = -195

joining_faction_minor_reluctance_value = 5
joining_faction_medium_reluctance_value = -95
joining_faction_major_reluctance_value = -295
joining_faction_monumental_reluctance_value = -595
joining_faction_blocking_reluctance_value = -995

The condition for the validity of the interaction have been slightly changed:
Code:
is_shown = {
    scope:actor = {
        is_a_faction_member = yes
        liege = scope:recipient.liege
        NOR = {
            joined_faction = scope:recipient.joined_faction
            scope:recipient = scope:actor.liege
        }
        ##########
        # REWORK #
        trigger_if = {
            limit = { is_ai = yes }
            minimum_faction_commitment_trigger = { VALUE = recruiting_for_faction_blocking_reluctance_value }
        }
        ##########
    }
}

is_valid_showing_failures_only = {
    ##########
    # REWORK #    (mostly the same, but the script is rearranged)
    scope:actor = {
        trigger_if = {
            limit = { NOT = { government_allows = administrative } }
            has_strong_usable_hook = scope:recipient
        }
        trigger_else_if = {
            limit = { NOT = { has_strong_usable_hook = scope:recipient } }
            influence >= scope:actor.monumental_influence_value     # exact value in 'cost' section
        }
        trigger_else = {
            has_strong_usable_hook = scope:recipient
        }
        NOT = { is_at_war_with = scope:recipient }
    }
    scope:recipient = {
        trigger_if = {
            limit = { is_a_faction_member = yes }
            joined_faction.faction_leader = { is_ai = yes }
        }
        is_forced_into_faction = no
        can_join_faction = scope:actor.joined_faction
        trigger_if = {
            limit = {
                government_allows = administrative
                NOT = {
                    scope:actor = {
                        has_strong_usable_hook = scope:recipient
                    }
                }
            }
            NOT = { opinion = { target = scope:actor value <= -50 } }
            NOT = {
                custom_tooltip = {
                    text = IRREMEDIABLY_RELUCTANT_TO_JOIN_FACTION_DESC
                    join_faction_chance = {
                        target = scope:actor.joined_faction
                        value < joining_faction_blocking_reluctance_value
                    }
                }
            }
        }
    }
    ##########
    custom_description = {
        text = barons_joining_independence_factions
        NAND = {
            scope:actor.joined_faction = { faction_is_type = independence_faction }
            scope:recipient.highest_held_title_tier = tier_barony
        }
    }
}

The cost for the interaction is scaled this way:
Code:
cost = {        # 250, 500 (Vanilla), 750, 1000, or 1500
    influence = {
        value = 0
        if = {
            limit = { NOT = { scope:hook = yes } }
            add = monumental_influence_value
            scope:recipient = {
                if = {
                    limit = {
                        join_faction_chance = {
                            target = scope:actor.joined_faction
                            value < joining_faction_minor_reluctance_value
                        }
                    }
                    add = monumental_influence_value        # *2
                    if = {
                        limit = {
                            join_faction_chance = {
                                target = scope:actor.joined_faction
                                value < joining_faction_medium_reluctance_value
                            }
                        }
                        add = monumental_influence_value        # *3
                        if = {
                            limit = {
                                join_faction_chance = {
                                    target = scope:actor.joined_faction
                                    value < joining_faction_major_reluctance_value
                                }
                            }
                            add = monumental_influence_value        # *4
                            if = {
                                limit = {
                                    join_faction_chance = {
                                        target = scope:actor.joined_faction
                                        value < joining_faction_monumental_reluctance_value
                                    }
                                }
                                add = monumental_influence_value
                                add = monumental_influence_value        # *6
                            }
                        }
                    }
                }
            }
        }
    }
}

And the chance for the AI to send the interaction is also scaled on its commitment to the faction:
Code:
ai_will_do = {    # 100%, 50%, 25%, 10%, or 5%
    base = 100
 
    # Don't steal players' factions' members
    modifier = {
        factor = 0
        scope:recipient = {
            is_a_faction_member = yes
            joined_faction = {
                faction_leader = {
                    is_ai = no
                }
            }
        }
    }

    ##########
    # REWORK #
    modifier = {
        factor = 0.5    # 100*0.5 = 50
        NOT = { minimum_faction_commitment_trigger = { VALUE = recruiting_for_faction_minor_reluctance_value } }
    }
    modifier = {
        factor = 0.5    # 50*0.5 = 25
        NOT = { minimum_faction_commitment_trigger = { VALUE = recruiting_for_faction_medium_reluctance_value } }
    }
    modifier = {
        factor = 0.4    # 25*0.4 = 10
        NOT = { minimum_faction_commitment_trigger = { VALUE = recruiting_for_faction_major_reluctance_value } }
    }
    modifier = {
        factor = 0.5    # 10*0.5 = 5
        NOT = { minimum_faction_commitment_trigger = { VALUE = recruiting_for_faction_monumental_reluctance_value } }
    }
    ##########
}
 

Attachments

  • 99_faction_interactions_reworked.txt
    8,2 KB · Views: 0
  • 99_force_join_faction_by_influence_values.txt
    3,5 KB · Views: 0
  • 99_force_join_faction_by_influence_triggers.txt
    151 bytes · Views: 0
  • force_faction_rework_l_english.yml
    307 bytes · Views: 0
  • Can be forced - Vanilla-Nerfed.png
    42 MB · Views: 0
Last edited:
  • 1Like
Reactions: