namespace = fp1_yearly ################################################## # #Standard Yearlies # 0001 - 0010 An Escaping Thrall Robs You # 0011 - 0020 Locals Call for Courtier to be Declared Nithing # 0021 - 0030 Two of your Knights wish to Holmgang over a Dispute # 0031 - 0040 A Mighty Warrior with a Big Personality Arrives # 0041 - 0050 [Russia/Steppe] Islamic Explorer Visits Court # 0051 - 0070 [Rural] A Dead Character is Rumoured to have become a Draugr # 0071 - 0090 [Rural] A Troll has been sighted & is attacking villages/peasants # 0091 - 0100 Commissioning a Longship for Yourself # 0101 - 0110 A Guest/Courtier Challenges you to Riddles # 0111 - 0120 Nithing Pole Raised Against Courtier # # #Flavour Yearlies # 0501 - 0510 Out for a Sail - you spot a ship in distress. # 0511 - 0520 The Stench of Success - a courtier won't let an old trophy go. # 0521 - 0530 Blood on the Snow - your child wishes to snowball fight. # 0531 - 0540 [Dynasty] on Ice - your child wants to learn how to ice skate. # 0541 - 0550 The Beast of [Capital] - your child is playing pranks on courtiers. # 0551 - 0560 Fishy Business - a courtier won't stop eating rotten fish. # 0561 - 0570 My Arm Against Yours - a knight challenges you to arm-wrestling. # 0571 - 0580 Petty Vandalism - your child has vandalised a runestone. # 0581 - 0590 When I Grow Up - your child wishes to be a shieldperson. # 0591 - 0600 Raised Voices at the Thing - two of your counties are fighting at a regional thing. # 0601 - 0610 The Hardest Part of Ruling - you're incredibly bored in a protracted thing session. # 0611 - 0620 Leading by Example - one of your children hurts another whilst imitating you. # 0621 - 0630 A Shiny New Toy - your child wants a specific piece of loot from a raid. # 0631 - 0640 A Cynical Bent - you notice a knight not sacrificing after a raid. # 0641 - 0650 Worthy of the Ocean - your longships are in disrepair. # 0651 - 0660 Leviathan - you spot a whale whilst sailing. # 0661 - 0670 A Novel Challenge - a knight challenges you to skiing. # 0671 - 0680 A Slippery Slope - your child wants to go sledding. # 0681 - 0690 Why Can't I Come? - your child wants to come raiding. # 0691 - 0700 Attempted Atonement - a knight has converted after raiding a reformed faith. # # #Special Yearlies # 1001 - 1030 A Mysterious Stranger Stays at Court # 1031 - 1060 RIP # 1061 - 1071 Commissioning a Longship for a Funeral # 1071 - 1080 Sparklingly Clean # 1081 - 1090 Explorer from Phantom Islands ################################################## ################################################## # STANDARD YEARLIES ################################################## # An Escaping Thrall Robs You # by Ewan Cowhig Croft # 0001 - 0010 ################################################## scripted_trigger suitably_terrible_knight_trigger = { is_available_ai = yes is_ruler = no # Just make sure they have at least one knight with believably-bad prowess. Deliberately "<", rather than "<=". prowess < high_skill_rating # And uhh, for obvious reasons... NOT = { has_trait = blind } } # A thrall leaves your court in the night. fp1_yearly.0001 = { type = character_event title = fp1_yearly.0001.t desc = fp1_yearly.0001.desc theme = stewardship left_portrait = { character = scope:scapegoat animation = shame } override_background = { reference = throne_room } trigger = { #DLC check. has_fp1_dlc_trigger = yes #Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0001 } is_landed = yes #Must be able to raid, or else your thrall economy is being phased out. can_raid_trigger = yes #Should be North Germanic, or the flavour won't make sense. culture = { has_cultural_pillar = heritage_north_germanic } #Needs a knight for scapegoating. any_knight = { count >= 1 suitably_terrible_knight_trigger = yes } } weight_multiplier = { base = 1 #Weight up a little for rulers that thralls are desperate to escape from. modifier = { add = 0.5 has_trait = sadistic } modifier = { add = 0.25 has_trait = callous } #And weight down for anyone who's a bit nicer. Not to suggest that the thralls are treated particularly well, but they're not being casually murdered for fun like a sadist might. modifier = { add = -0.5 has_trait = compassionate } modifier = { add = -0.25 has_trait = forgiving } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0001 days = 1825 } # Pick a fall guy. random_knight = { limit = { suitably_terrible_knight_trigger = yes } weight = { # Every point of prowess a knight has lowers the chance for it to be them by 2%. base = 0 modifier = { add = { value = 50 subtract = prowess } } # And every point of compassion another 1%. modifier = { add = ai_compassion } } save_scope_as = scapegoat } # Give the escaped thrall a gender for loc. random_dummy_gender_effect = yes # Remove the stolen jewels. remove_short_term_gold = medium_gold_value } # Send out descriptions of the thrall and the stolen goods. option = { name = fp1_yearly.0001.a duel = { skill = stewardship value = decent_skill_rating # The thrall is spotted and captured several villages away. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0001.a.tt_success send_interface_toast = { title = fp1_yearly.0001.a.tt_success left_icon = root add_prestige = medium_prestige_gain add_gold = medium_gold_value } } # The thrall slips the net, with your stolen goods. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0001.a.tt_failure send_interface_toast = { title = fp1_yearly.0001.a.tt_failure left_icon = root custom_tooltip = fp1_yearly.0001.gold_stays_lost.tt } } } stress_impact = { diligent = medium_stress_impact_loss lazy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 0.5 ai_rationality = 0.25 } modifier = { # Weight up for stress. add = 20 has_trait = diligent } modifier = { # Weight down for stress. add = -20 has_trait = lazy } } } #Start a manhunt. option = { name = fp1_yearly.0001.b duel = { skill = martial value = decent_skill_rating #The thrall is caught before they can get far. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0001.b.tt_success send_interface_toast = { title = fp1_yearly.0001.b.tt_success left_icon = root add_prestige = medium_prestige_gain add_gold = medium_gold_value } } #The thrall slips the net, with your stolen goods. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0001.b.tt_failure send_interface_toast = { title = fp1_yearly.0001.b.tt_failure left_icon = root custom_tooltip = fp1_yearly.0001.gold_stays_lost.tt } } } stress_impact = { diligent = medium_stress_impact_loss lazy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 0.5 ai_rationality = 0.25 } modifier = { #Weight up for stress. add = 20 has_trait = diligent } modifier = { #Weight down for stress. add = -20 has_trait = lazy } } } #Fine scope:scapegoat. option = { name = fp1_yearly.0001.c #And no money was lost after all. add_prestige = medium_prestige_gain #Unless you're scope:scapegoat. scope:scapegoat = { pay_short_term_gold = { target = root gold = root.medium_gold_value } #Who is, understandably, a bit miffed. progress_towards_rival_effect = { REASON = rival_thrall_scapegoat CHARACTER = root OPINION = 0 } add_opinion = { target = root modifier = angry_opinion opinion = -20 } } stress_impact = { wrathful = minor_stress_impact_loss greedy = medium_stress_impact_loss vengeful = major_stress_impact_loss calm = minor_stress_impact_gain generous = medium_stress_impact_gain forgiving = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.25 ai_compassion = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = wrathful } modifier = { #Weight up for stress. add = 20 has_trait = greedy } modifier = { #Weight up for stress. add = 30 has_trait = vengeful } modifier = { #Weight down for stress. add = -10 has_trait = calm } modifier = { #Weight down for stress. add = -20 has_trait = generous } modifier = { #Weight down for stress. add = -30 has_trait = forgiving } } } #Not your fault, scope:scapegoat. These things happen. option = { name = fp1_yearly.0001.d #Some assets are gone for good. custom_tooltip = fp1_yearly.0001.gold_stays_lost.tt #Welp, you _did_ show clemency. if = { limit = { can_add_hook = { type = favor_hook target = scope:scapegoat } } add_hook = { type = favor_hook target = scope:scapegoat } } scope:scapegoat = { add_opinion = { target = root modifier = relieved_opinion opinion = 20 } } stress_impact = { calm = minor_stress_impact_loss generous = medium_stress_impact_loss forgiving = major_stress_impact_loss wrathful = minor_stress_impact_gain greedy = medium_stress_impact_gain vengeful = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_vengefulness = -0.5 } modifier = { #Weight up for stress. add = 10 has_trait = calm } modifier = { #Weight up for stress. add = 20 has_trait = generous } modifier = { #Weight up for stress. add = 30 has_trait = forgiving } modifier = { #Weight down for stress. add = -10 has_trait = wrathful } modifier = { #Weight down for stress. add = -20 has_trait = greedy } modifier = { #Weight down for stress. add = -30 has_trait = vengeful } } } } ################################################## # Locals Call for Courtier to be Declared Nithing # by Ewan Cowhig Croft # 0011 - 0020 ################################################## scripted_trigger offensive_courtier_candidate_trigger = { #Filter out the basic miscs. is_available_ai_adult = yes #Have some commited some genuine malfeasance, or just be irritating to at least some people. OR = { #Having committed murder by poison is a solid way to become a nithing; this might be a secret, but we assume local rumours about a shady buyer of poisons abound... has_character_flag = murdered_by_poison #Legitimately being a witch, and a Germanic Pagan one at that, is a good reason, though all parties have to agree on that being a bad thing first. AND = { faith = { has_doctrine_parameter = witchcraft_illegal } root.faith = { has_doctrine_parameter = witchcraft_illegal } root.capital_county.faith = { has_doctrine_parameter = witchcraft_illegal } OR = { has_trait = witch any_secret = { type = secret_witch } } } #Irritating personality traits can be cause for suspicion. has_trait = wrathful has_trait = deceitful has_trait = craven has_trait = ambitious has_trait = arbitrary has_trait = paranoid has_trait = sadistic has_trait = stubborn has_trait = vengeful #And really anyone dealing with herbs, potions, poisons, or alchemy. has_trait = lifestyle_mystic has_trait = lifestyle_physician has_trait = lifestyle_herbalist } #If they're heir to a player, then they should only be the heir of the player making the decision. OR = { #Plus we need to filter out anyone who isn't an heir at all. any_heir_title = { count = 0 } any_heir_title = { is_title_created = yes holder = { is_ai = no this != root } } } } scripted_effect agree_to_courtier_becoming_nithing_effect = { # First, we remove any legal relations. ## Specifically marriage. if = { limit = { any_spouse = { this = root } root.faith = { # _Technically_ they're 'dead' and this isn't a divorce, but if divorce was as easy as declaring your spouse legally dead, Henry VIII would've remained a good Catholic boi till the end of his days. NOT = { has_doctrine = doctrine_divorce_disallowed } } } divorce_effect = { DIVORCER = root DIVORCEE = scope:offensive_courtier } } ## And concubinage. if = { limit = { scope:offensive_courtier = { is_concubine_of = root } } root = { remove_concubine = scope:offensive_courtier } } # Then we evict them. banish = yes # banish_effect not used for unlanded # Which naturally causes some friction. add_opinion = { target = root modifier = hate_opinion opinion = -75 } ## Including some ramifications later, potentially. hidden_effect = { if = { limit = { can_set_relation_potential_rival_trigger = { CHARACTER = scope:offensive_courtier } } set_relation_potential_rival = scope:offensive_courtier } } # And, finally, let the whole world know. add_character_modifier = { modifier = nithing_fp1_modifier years = 20 } } # Locals call for one of your courtiers to be exiled as a nithing. fp1_yearly.0011 = { type = character_event title = fp1_yearly.0011.t desc = { desc = fp1_yearly.0011.desc # And if they have a hard-to-live with virtue... triggered_desc = { trigger = { exists = scope:priest } desc = fp1_yearly.0011.desc.priest } } theme = realm left_portrait = { character = scope:offensive_courtier animation = shock } right_portrait = { character = scope:priest animation = dismissal } trigger = { #DLC check. has_fp1_dlc_trigger = yes #Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0011 } is_landed = yes #Must have at least one suitable courtier. any_courtier = { offensive_courtier_candidate_trigger = yes } #Both yourself and your capital must be Germanic Pagans. religion = religion:germanic_religion capital_county.religion = religion:germanic_religion } weight_multiplier = { base = 1 } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0011 days = 3650 } # Save the capital for loc. capital_barony = { save_scope_as = capital_barony } # Pick a suitable courtier to be the nithing. random_courtier = { limit = { offensive_courtier_candidate_trigger = yes } # Make sure we grab someone interesting. weight = { base = 1 # Claimants are good picks. modifier = { add = 10 is_claimant = yes } # Highly-skilled characters are good picks. modifier = { add = 5 diplomacy >= decent_skill_rating } modifier = { add = 5 martial >= decent_skill_rating } modifier = { add = 5 stewardship >= decent_skill_rating } modifier = { add = 5 intrigue >= decent_skill_rating } modifier = { add = 5 learning >= decent_skill_rating } modifier = { add = 5 prowess >= decent_skill_rating } # Characters with some relation to root are adequate picks. modifier = { add = 10 has_important_relationship_trigger = { CHARACTER = root } } } # Nab them for use elsewhere. save_scope_as = offensive_courtier } # Does scope:offensive_courtier have any virtuous traits that are offensive to the commonfolk? If so, designate a priest to defend them. if = { limit = { scope:offensive_courtier = { OR = { # wrathful AND = { has_trait = wrathful faith = { trait_is_virtue = wrathful } } # deceitful AND = { has_trait = deceitful faith = { trait_is_virtue = deceitful } } # craven AND = { has_trait = craven faith = { trait_is_virtue = craven } } # ambitious AND = { has_trait = ambitious faith = { trait_is_virtue = ambitious } } # arbitrary AND = { has_trait = arbitrary faith = { trait_is_virtue = arbitrary } } # paranoid AND = { has_trait = paranoid faith = { trait_is_virtue = paranoid } } # sadistic AND = { has_trait = sadistic faith = { trait_is_virtue = sadistic } } # stubborn AND = { has_trait = stubborn faith = { trait_is_virtue = stubborn } } # vengeful AND = { has_trait = vengeful faith = { trait_is_virtue = vengeful } } } } any_learning_councillor = { exists = this } } random_learning_councillor = { save_scope_as = priest } } } # Family: disinherit & banish. option = { name = fp1_yearly.0011.a trigger = { house = scope:offensive_courtier.house } # The nithing is exiled utterly. scope:offensive_courtier = { disinherit_effect = { DISINHERITOR = root } agree_to_courtier_becoming_nithing_effect = yes } # Your capital is pretty happy about the nithing being given the boot. capital_county = { add_county_modifier = { modifier = nithing_exiled_fp1_modifier years = 10 } } stress_impact = { vengeful = major_stress_impact_loss forgiving = massive_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_boldness = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = vengeful } modifier = { # Weight down for stress. add = -40 has_trait = forgiving } } } # Non-family: banish them. option = { name = fp1_yearly.0011.b trigger = { house != scope:offensive_courtier.house } # The nithing is exiled utterly. scope:offensive_courtier = { agree_to_courtier_becoming_nithing_effect = yes } # Your capital is pretty happy about the nithing being given the boot. capital_county = { add_county_modifier = { modifier = nithing_exiled_fp1_modifier years = 10 } } stress_impact = { vengeful = major_stress_impact_loss forgiving = massive_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_boldness = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = vengeful } modifier = { # Weight down for stress. add = -40 has_trait = forgiving } } } # Harbour them against the angry mob. option = { name = fp1_yearly.0011.c # Get a favour, or at least some opinion. if = { limit = { can_add_hook = { type = favor_hook target = scope:offensive_courtier } } add_hook = { type = favor_hook target = scope:offensive_courtier } } else = { reverse_add_opinion = { modifier = fp1_saved_me_from_the_mob_opinion target = scope:offensive_courtier } } # Your capital county isn't super happy about this, though. capital_county = { add_county_modifier = { modifier = nithing_harboured_fp1_modifier years = 10 } } stress_impact = { forgiving = major_stress_impact_loss vengeful = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_vengefulness = -0.5 } modifier = { # Weight down for stress. add = 30 has_trait = forgiving } modifier = { # Weight down for stress. add = -20 has_trait = vengeful } } } # Refuse to rule. option = { name = fp1_yearly.0011.d # Not your circus, not your trained dancing bears. add_stress = massive_stress_loss # Both capital_county & scope:offensive_courtier are unhappy with your inaction. reverse_add_opinion = { modifier = fp1_abandoned_me_to_the_mob_opinion target = scope:offensive_courtier } capital_county = { add_county_modifier = { modifier = nithing_in_limbo_fp1_modifier years = 10 } } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.25 ai_energy = -0.5 } } } } ################################################## # Two of your Knights wish to Holmgang over a Dispute # by Ewan Cowhig Croft # 0021 - 0030 ################################################## scripted_trigger suitable_knight_for_dispute_trigger = { is_available_ai_adult = yes #Nab them for checking various things later in the event. save_temporary_scope_as = current_knight #Filter out rulers, as the loc mismatches such tonally. is_ruler = no #They have to be at least not non-argumentative. NOR = { has_trait = forgiving has_trait = craven } #For the sake of ease, they shouldn't have a positive special relationship with any other knight. NOT = { root = { any_knight = { has_friendly_relationship_trigger = { CHARACTER = scope:current_knight } } } } #Is the character hookable for the event results? root = { can_add_hook = { type = favor_hook target = scope:current_knight } } } scripted_trigger deviant_knight_trigger = { OR = { has_trait = deviant any_secret = { type = secret_deviant } } } scripted_effect holmgang_results_effect = { if = { limit = { government_has_flag = government_is_tribal } $LOSER$ = { death = { killer = $WINNER$ death_reason = death_duel } } } else = { $LOSER$ = { increase_wounds_effect = { REASON = duel } } } } # Two knights fight to the death over nothing. fp1_yearly.0021 = { type = character_event title = fp1_yearly.0021.t desc = { desc = fp1_yearly.0021.desc.intro first_valid = { triggered_desc = { trigger = { scope:dispute_nature = flag:doggo } desc = fp1_yearly.0021.desc.doggo } triggered_desc = { trigger = { scope:dispute_nature = flag:spit_of_land } desc = fp1_yearly.0021.desc.spit_of_land } triggered_desc = { trigger = { scope:dispute_nature = flag:unrepeatable_insult } desc = fp1_yearly.0021.desc.unrepeatable_insult } triggered_desc = { trigger = { scope:dispute_nature = flag:escalating_prank_war } desc = fp1_yearly.0021.desc.escalating_prank_war } triggered_desc = { trigger = { scope:dispute_nature = flag:religious_differences } desc = fp1_yearly.0021.desc.religious_differences } triggered_desc = { trigger = { scope:dispute_nature = flag:stolen_pig } desc = fp1_yearly.0021.desc.stolen_pig } # Female Variant. triggered_desc = { trigger = { scope:dispute_nature = flag:defiled_longboat scope:defiling_knight = { is_female = yes } } desc = fp1_yearly.0021.desc.defiled_longboat.woman } # Male Variant. triggered_desc = { trigger = { scope:dispute_nature = flag:defiled_longboat scope:defiling_knight = { is_male = yes } } desc = fp1_yearly.0021.desc.defiled_longboat } triggered_desc = { trigger = { scope:dispute_nature = flag:board_game } desc = fp1_yearly.0021.desc.board_game } } desc = fp1_yearly.0021.desc.outro } theme = unfriendly left_portrait = { character = scope:first_knight animation = anger } right_portrait = { character = scope:second_knight animation = disgust } override_background = { reference = wilderness } trigger = { #DLC check. has_fp1_dlc_trigger = yes #Standard checks. is_available_at_peace_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0021 } is_landed = yes #Must be North Germanic. culture = { has_cultural_pillar = heritage_north_germanic } #Holmgangs must still be in fashion. NOT = { culture = { has_cultural_era_or_later = culture_era_high_medieval } } #Must have at least two knights available who can get into a dispute. any_knight = { count >= 2 suitable_knight_for_dispute_trigger = yes } } weight_multiplier = { base = 1 } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0021 days = 1825 } #Sort Actors. ##Grab capital barony for loc. capital_barony = { save_scope_as = capital_barony } ##Grab the first knight. random_knight = { limit = { suitable_knight_for_dispute_trigger = yes } save_scope_as = first_knight } ##Grab the second knight. random_knight = { limit = { suitable_knight_for_dispute_trigger = yes this != scope:first_knight } save_scope_as = second_knight } ##Just make them hate each other a little. scope:first_knight = { add_opinion = { target = scope:second_knight modifier = respect_opinion opinion = -40 } reverse_add_opinion = { target = scope:second_knight modifier = respect_opinion opinion = -40 } progress_towards_rival_effect = { REASON = rival_knights_slapfight CHARACTER = scope:second_knight OPINION = 0 } } #Pick which dispute type they'll have. ##Eight options of 12.5% chance each. random_list = { #Dispute over a pet killed in an accident. 125 = { #No trigger, fallback. save_scope_value_as = { name = dispute_nature value = flag:doggo } select_local_animal_effect = { TYPE = any } # Save scope to limit possible animals: any/big/small/dangerous/harmless/prowling # And, if scope:second_knight actually has a doggo, kill it. scope:second_knight = { if = { limit = { any_owned_story = { type = story_cycle_pet_dog exists = story_owner.var:story_cycle_dog_name } } random_owned_story = { type = story_cycle_pet_dog limit = { exists = story_owner.var:story_cycle_dog_name } story_owner = { add_character_flag = { flag = dog_is_dying } trigger_event = pet_animal.1199 } } } } } #Dispute over a spit of land that grows the best cabbages. 125 = { #Both knights must care at least a little about money, and at least one a little too much. trigger = { NOR = { scope:first_knight = { OR = { has_trait = generous has_trait = profligate has_trait = improvident } } scope:second_knight = { OR = { has_trait = generous has_trait = profligate has_trait = improvident } } } OR = { scope:first_knight = { has_trait = greedy } scope:second_knight = { has_trait = greedy } } } save_scope_value_as = { name = dispute_nature value = flag:spit_of_land } } #Dispute over an unrepeatable insult involving a goat & a good drinking horn. 125 = { #Both knights must be the type to let the insult escalate, and at least one to take it too far. trigger = { NOR = { scope:first_knight = { has_trait = calm } scope:second_knight = { has_trait = calm } } OR = { scope:first_knight = { has_trait = wrathful } scope:first_knight = { has_trait = wrathful} } } save_scope_value_as = { name = dispute_nature value = flag:unrepeatable_insult } } #Dispute resulting from an escalating prank war. 125 = { #Both knights must be people who might get involved in such a thing, and one should be the type to take it too far. trigger = { NOR = { scope:first_knight = { OR = { has_trait = shy has_trait = reclusive } } scope:second_knight = { OR = { has_trait = shy has_trait = reclusive } } } OR = { scope:first_knight = { has_trait = vengeful } scope:second_knight = { has_trait = vengeful } } } save_scope_value_as = { name = dispute_nature value = flag:escalating_prank_war } } #Dispute over religious differences. 125 = { #Both knights must find each other's faiths disagreeable. trigger = { scope:first_knight.faith = { faith_hostility_level = { target = scope:second_knight.faith value >= faith_hostile_level } } scope:second_knight.faith = { faith_hostility_level = { target = scope:first_knight.faith value >= faith_hostile_level } } #Quietly exclude sceptics also. NOR = { scope:first_knight = { has_trait = cynical } scope:second_knight = { has_trait = cynical } } } save_scope_value_as = { name = dispute_nature value = flag:religious_differences } } #Dispute over a stolen pig. 125 = { trigger = { #Exempt faiths that don't eat pork: technically the pig could be as a pet or for non-edible purposes, but it scans best if we just don't bring this up. NOR = { scope:first_knight = { OR = { religion = religion:judaism_religion religion = religion:islam_religion } } scope:second_knight = { OR = { religion = religion:judaism_religion religion = religion:islam_religion } } } } save_scope_value_as = { name = dispute_nature value = flag:stolen_pig } } #Dispute resulting from someone making a sea-going vessel a bit saltier. 125 = { #Requires at least one knight to be a deviant. trigger = { OR = { scope:first_knight = { deviant_knight_trigger = yes } scope:second_knight = { deviant_knight_trigger = yes } } } save_scope_value_as = { name = dispute_nature value = flag:defiled_longboat } #Specify who defiled who's longboat. if = { limit = { scope:first_knight = { deviant_knight_trigger = yes } } scope:first_knight = { save_scope_as = defiling_knight } scope:second_knight = { save_scope_as = unfortunate_knight } } else = { scope:second_knight = { save_scope_as = defiling_knight } scope:first_knight = { save_scope_as = unfortunate_knight } } } #Dispute resulting from the mysterious Viking board game. 125 = { #No trigger, fallback. save_scope_value_as = { name = dispute_nature value = flag:board_game } } } } #Strictly forbid them. option = { name = fp1_yearly.0021.b #Then, we see if your rule is feared or jeered. duel = { skill = intrigue value = 12 #You successfully terrify them into not fighting. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0021.b.tt_success send_interface_toast = { title = fp1_yearly.0021.b.tt_success left_icon = scope:first_knight add_dread = medium_dread_gain add_prestige = minor_prestige_gain } } #They begrudgingly agree not to fight, but shit-talk you for it. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0021.b.tt_failure send_interface_toast = { title = fp1_yearly.0021.b.tt_failure left_icon = scope:first_knight add_dread = medium_dread_loss add_prestige = minor_prestige_loss } } } #Regardless of outcome, they dislike you for this. reverse_add_opinion = { target = scope:first_knight modifier = respect_opinion opinion = -30 } reverse_add_opinion = { target = scope:second_knight modifier = respect_opinion opinion = -30 } stress_impact = { arbitrary = minor_stress_impact_loss just = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.25 ai_vengefulness = -0.25 ai_rationality = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = arbitrary } modifier = { #Weight down for stress. add = -10 has_trait = just } } } #Bet on scope:first_knight. option = { name = fp1_yearly.0021.c #Sort the duel. scope:first_knight = { duel = { skill = prowess target = scope:second_knight #scope:first_knight wins! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0021.c.tt_success root = { send_interface_toast = { title = fp1_yearly.0021.c.tt_success left_icon = scope:first_knight add_gold = minor_gold_value holmgang_results_effect = { WINNER = scope:first_knight LOSER = scope:second_knight } } } } #scope:second_knight wins! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0021.c.tt_failure root = { send_interface_toast = { title = fp1_yearly.0021.c.tt_failure left_icon = scope:second_knight remove_short_term_gold = minor_gold_value holmgang_results_effect = { WINNER = scope:second_knight LOSER = scope:first_knight } } } } } } stress_impact = { greedy = minor_stress_impact_loss } ai_chance = { base = 100 ai_value_modifier = { ai_greed = 0.5 ai_compassion = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = greedy } } } #Bet on scope:second_knight. option = { name = fp1_yearly.0021.d #Sort the duel. scope:first_knight = { duel = { skill = prowess target = scope:second_knight #scope:first_knight wins! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0021.d.tt_failure root = { send_interface_toast = { title = fp1_yearly.0021.d.tt_failure left_icon = scope:first_knight remove_short_term_gold = minor_gold_value holmgang_results_effect = { WINNER = scope:first_knight LOSER = scope:second_knight } } } } #scope:second_knight wins! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0021.d.tt_success root = { send_interface_toast = { title = fp1_yearly.0021.d.tt_success left_icon = scope:second_knight add_gold = minor_gold_value holmgang_results_effect = { WINNER = scope:second_knight LOSER = scope:first_knight } } } } } } stress_impact = { greedy = minor_stress_impact_loss } ai_chance = { base = 100 ai_value_modifier = { ai_greed = 0.5 ai_compassion = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = greedy } } } #Grant them permission. option = { name = fp1_yearly.0021.a #Sort the duel. scope:first_knight = { duel = { skill = prowess target = scope:second_knight #scope:first_knight wins! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0021.a.tt_success root = { send_interface_toast = { title = fp1_yearly.0021.a.tt_success left_icon = scope:first_knight add_hook = { type = favor_hook target = scope:first_knight } holmgang_results_effect = { WINNER = scope:first_knight LOSER = scope:second_knight } } } } #scope:second_knight wins! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0021.a.tt_failure root = { send_interface_toast = { title = fp1_yearly.0021.a.tt_failure left_icon = scope:second_knight add_hook = { type = favor_hook target = scope:second_knight } holmgang_results_effect = { WINNER = scope:second_knight LOSER = scope:first_knight } } } } } } stress_impact = { just = minor_stress_impact_loss } ai_chance = { base = 100 ai_value_modifier = { ai_honor = 0.5 ai_vengefulness = 0.25 } modifier = { #Weight up for stress. add = 10 has_trait = just } } } } ################################################## # A Mighty Warrior with a Big Personality Arrives # by Ewan Cowhig Croft # 0031 - 0040 ################################################## scripted_trigger fp1_0031_any_valid_king_trigger = { #Make sure it's a kingdom that's known about. in_diplomatic_range = root #And that the warrior isn't lying about someone the friend cares for. NOR = { any_close_or_extended_family_member = { this = root } any_spouse = { this = root } } #We're quite happy to suggest that the warrior is lying, but make sure that it's not an excessively dodgy lie. OR = { any_child = { count = 0 } any_child = { count = all is_physically_able_adult = yes } } } # A deceitful warrior is telling tall-tales at court. fp1_yearly.0031 = { type = character_event title = fp1_yearly.0031.t desc = { desc = fp1_yearly.0031.desc.intro first_valid = { triggered_desc = { trigger = { scope:lie_nature = flag:sunk_longboat } desc = fp1_yearly.0031.desc.sunk_longboat } triggered_desc = { trigger = { scope:lie_nature = flag:wrestled_whale } desc = fp1_yearly.0031.desc.wrestled_whale } triggered_desc = { trigger = { scope:lie_nature = flag:charged_city exists = scope:fruit_knife } desc = fp1_yearly.0031.desc.charged_city_fruit_knife } triggered_desc = { trigger = { scope:lie_nature = flag:charged_city NOT = { exists = scope:fruit_knife } } desc = fp1_yearly.0031.desc.charged_city } triggered_desc = { trigger = { scope:lie_nature = flag:kept_iceland_afloat } desc = fp1_yearly.0031.desc.kept_iceland_afloat } triggered_desc = { trigger = { scope:lie_nature = flag:wooed_heir } desc = fp1_yearly.0031.desc.wooed_heir } triggered_desc = { trigger = { scope:lie_nature = flag:hunted_troll } desc = fp1_yearly.0031.desc.hunted_troll } } desc = fp1_yearly.0031.desc.outro } theme = intrigue left_portrait = { character = root animation = toast triggered_animation = { trigger = { has_trait = impatient } animation = boredom } } right_portrait = { character = scope:lying_warrior animation = storyteller } override_background = { reference = feast } trigger = { #DLC check. has_fp1_dlc_trigger = yes #Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0031 } is_landed = yes #Must be some form of North Germanic culture. culture = { has_cultural_pillar = heritage_north_germanic } #And that culture must not be too advanced. culture = { NOT = { has_cultural_era_or_later = culture_era_high_medieval } } } weight_multiplier = { base = 1 } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0031 days = 1825 } #Save the capital for loc. capital_barony = { save_scope_as = capital_barony } #Create our lying warrior. create_character = { location = root.capital_province template = fp1_deceitful_warrior_character save_scope_as = lying_warrior } #Create our actual lie. ##Six options for roughly 16.6% chance apiece. random_list = { #Swam home after their longboat sank from too much plunder. 166 = { #Fallback: always available. save_scope_value_as = { name = lie_nature value = flag:sunk_longboat } } #Wrestled a wounded whale ashore single-handed. 166 = { #Fallback: always available. save_scope_value_as = { name = lie_nature value = flag:wrestled_whale } } #Lead the charge on the walls of a great city. 166 = { #Fallback: always available. save_scope_value_as = { name = lie_nature value = flag:charged_city } #And an Easter egg for Nick. random = { chance = 1 save_scope_value_as = { name = fruit_knife value = yes } scope:lying_warrior = { give_nickname = nick_the_blessed } } } #Averted giant holmgang that would have sunk Iceland. 166 = { trigger = { #Must not have any counties in Iceland, as the news'd travel otherwise. NOT = { any_realm_de_jure_duchy = { this = title:d_iceland } } } save_scope_value_as = { name = lie_nature value = flag:kept_iceland_afloat } } #Wooed the child of a foreign king. 166 = { trigger = { any_kingdom = { is_title_created = yes holder = { fp1_0031_any_valid_king_trigger = yes } } } save_scope_value_as = { name = lie_nature value = flag:wooed_heir } #Designate a suitable kingdom. random_kingdom = { limit = { is_title_created = yes holder = { fp1_0031_any_valid_king_trigger = yes } } holder = { save_scope_as = disparaged_king } } #Set dummy appropriate gender. ## If the faith is generally intolerant, then we invent a heterosexual target. if = { limit = { faith = { OR = { has_doctrine_parameter = homosexuality_illegal has_doctrine_parameter = homosexuality_shunned } } } # Then females get a male invention. if = { limit = { scope:lying_warrior = { is_female = yes } } dummy_male = { save_scope_as = invented_heir } } # And males get a female invention. if = { limit = { scope:lying_warrior = { is_male = yes } } dummy_female = { save_scope_as = invented_heir } } } ## Otherwise, we randomise. else = { random_list = { 100 = { dummy_female = { save_scope_as = invented_heir } } 100 = { dummy_male = { save_scope_as = invented_heir } } } } ## Ensure that scope:lying_warrior's preferences line up with their invented target. ### Note: asexuals not specifically accounted for, since we can't reliably say which way(s) their preferences go, as we don't store that information. scope:lying_warrior = { if = { limit = { # Orthodox couplings. OR = { AND = { is_female = yes scope:invented_heir = { is_female = yes } } AND = { is_male = yes scope:invented_heir = { is_male = yes } } } # But a heterodox preference. has_sexuality = heterosexual } # Randomise scope:lying_warrior's sexuality to match their stories. random_list = { 100 = { set_sexuality = bisexual } 100 = { set_sexuality = homosexual } } } } } #Hunted troll. 166 = { #Fallback: always available. save_scope_value_as = { name = lie_nature value = flag:hunted_troll } #Gotta make it believable. scope:lying_warrior = { hidden_effect = { increase_wounds_effect = { REASON = fight } } } } } } #Invite them to stay permanently. option = { name = fp1_yearly.0031.a add_courtier = scope:lying_warrior stress_impact = { trusting = minor_stress_impact_loss paranoid = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.25 ai_sociability = 0.25 } modifier = { #Weight up for stress. add = 10 has_trait = trusting } modifier = { #Weight down for stress. add = -10 has_trait = paranoid } } } #Question their veracity. option = { name = fp1_yearly.0031.b #Standard intrigue duel; we make it a little easier, since you do have the choice of just gaining a courtier. duel = { skill = intrigue target = scope:lying_warrior #You expose their lies. 60 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0031.b.tt_success send_interface_toast = { title = fp1_yearly.0031.b.tt_success left_icon = scope:lying_warrior add_prestige = minor_prestige_gain scope:lying_warrior = { #Dispose of scope:lying_warrior. hidden_effect = { death = { death_reason = death_vanished } } } } } #They run circles around your questions. 40 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0031.b.tt_failure send_interface_toast = { title = fp1_yearly.0031.b.tt_failure left_icon = scope:lying_warrior add_prestige = minor_prestige_loss scope:lying_warrior = { #Dispose of scope:lying_warrior. hidden_effect = { death = { death_reason = death_vanished } } } } } } stress_impact = { paranoid = medium_stress_impact_loss trusting = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.25 ai_sociability = -0.5 } modifier = { #Weight up for stress. add = 20 has_trait = paranoid } modifier = { #Weight down for stress. add = -20 has_trait = trusting } } } #Tell them to tell people of your generous halls. option = { name = fp1_yearly.0031.c #Get a nice little bonus/negate a negative for being talked up. if = { limit = { has_character_modifier = stingy_host_fp1_modifier } remove_character_modifier = stingy_host_fp1_modifier } else = { add_character_modifier = { modifier = generous_host_fp1_modifier years = 10 } } #Dispose of scope:lying_warrior. hidden_effect = { scope:lying_warrior = { death = { death_reason = death_vanished } } } stress_impact = { gregarious = minor_stress_impact_loss arrogant = minor_stress_impact_loss shy = minor_stress_impact_gain humble = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.25 ai_sociability = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = gregarious } modifier = { #Weight up for stress. add = 10 has_trait = arrogant } modifier = { #Weight down for stress. add = -10 has_trait = shy } modifier = { #Weight down for stress. add = -10 has_trait = humble } } } } ################################################## # [Russia/Steppe] Islamic Explorer Visits Court # by Ewan Cowhig Croft # 0041 - 0050 ################################################## scripted_trigger suitable_islamic_realm_trigger = { #First off, we need people who will consider root a savage. NOR = { government_has_flag = government_is_tribal government_has_flag = government_is_nomadic } #Next, filter down to the correct religion. religion = religion:islam_religion #Making sure to only grab rulers from the Middle East. capital_province = { OR = { geographical_region = world_asia_minor geographical_region = world_middle_east_jerusalem geographical_region = world_middle_east_arabia geographical_region = world_middle_east_persia geographical_region = world_india_rajastan } } #And then misc checks to make sure that the tone is correct. top_liege = { NOR = { #Such as the liege not having much contact with Germanic Paganism. religion = religion:germanic_religion any_vassal_or_below = { religion = religion:germanic_religion } #The realm not being positioned next door to root. character_is_realm_neighbor = root.top_liege #And the realm generally not being inside the same (admittedly large) area. any_realm_county = { title_province = { geographical_region = dlc_fp1_region_russian_steppe } } } } } # An Islamic explorer stops by for a visit. fp1_yearly.0041 = { type = character_event title = fp1_yearly.0041.t desc = fp1_yearly.0041.desc theme = stewardship left_portrait = { character = scope:explorer animation = disapproval } right_portrait = { character = scope:sponsoring_liege animation = personality_rational } override_background = { reference = throne_room } trigger = { #DLC check. has_fp1_dlc_trigger = yes #Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0041 } is_landed = yes #Must be a Norse pagan tribal. government_has_flag = government_is_tribal religion = religion:germanic_religion #With a capital in the steppe/Russia. capital_province = { geographical_region = dlc_fp1_region_russian_steppe } #Just for good measure, you should probably be a small-ish realm. realm_size <= medium_realm_size #No same-realm Muslims. top_liege = { NOR = { religion = religion:islam_religion any_vassal_or_below = { religion = religion:islam_religion } } } #A suitable Islamic realm for the explorer to have come from must exists. any_kingdom = { holder ?= { suitable_islamic_realm_trigger = yes } } } weight_multiplier = { base = 1 } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0041 days = 3650 } #Grab home barony for loc. capital_barony = { save_scope_as = capital_barony } #Assign a home realm for the explorer. random_kingdom = { limit = { holder ?= { suitable_islamic_realm_trigger = yes} } holder = { save_scope_as = sponsoring_liege } } #Create the Islamic explorer. create_character = { location = root.capital_province template = fp1_islamic_explorer_character save_scope_as = explorer } hidden_effect = { scope:explorer = { add_random_tiered_trait_xp_effect = { TRAIT = lifestyle_mystic LEVEL_1 = yes LEVEL_3 = yes } add_random_tiered_trait_xp_effect = { TRAIT = lifestyle_physician LEVEL_1 = yes LEVEL_3 = yes } } } } #Host a small blot. option = { name = fp1_yearly.0041.a #Diplomacy duel to see how well you present yourself. duel = { skill = diplomacy value = decent_skill_rating #Your blot impresses the explorer. 40 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0041.a.tt_success send_interface_toast = { title = fp1_yearly.0041.a.tt_success left_icon = scope:explorer add_prestige = medium_prestige_gain add_character_modifier = { modifier = exotic_foreign_lord_fp1_modifier years = 10 } } } #Your pagan ways disgust the explorer. 60 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0041.a.tt_failure send_interface_toast = { title = fp1_yearly.0041.a.tt_failure left_icon = scope:explorer add_prestige = minor_prestige_loss add_character_modifier = { modifier = horrifying_foreign_lord_fp1_modifier years = 5 } } } } stress_impact = { zealous = medium_stress_impact_loss cynical = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.5 ai_sociability = 0.25 } modifier = { #Weight up for stress. add = 20 has_trait = zealous } modifier = { #Weight down for stress. add = -20 has_trait = cynical } } } #Invite them to stay and convert you. option = { name = fp1_yearly.0041.b #Prohibit the AI from converting to far-away religions unless they're genuinely very interested in scope:explorer's faith. trigger = { OR = { is_ai = no AND = { NOR = { has_trait = zealous #Zealous characters never convert on a whim. has_trait = cynical #Cynical characters aren't really interested in what anyone is selling. has_trait = arrogant #Arrogant characters believe their faith is already the best, even if they don't care much about it. has_trait = paranoid #Paranoid characters don't trust scope:explorer's tales. } OR = { has_trait = humble #Humble characters like to give everyone a fair chance to explain their POV. has_trait = trusting #Trusting characters can be talked into many things, given time & charisma. } } } } #Get scope:explorer as a courtier. add_courtier = scope:explorer #Sort conversion. set_character_faith_with_conversion = scope:explorer.faith #Get scope:sponsoring_liege as a friend, if possible. if = { limit = { can_set_relation_friend_trigger = { CHARACTER = scope:sponsoring_liege } } set_relation_friend = { reason = friend_converted_explorer target = scope:sponsoring_liege } reverse_add_opinion = { target = scope:sponsoring_liege modifier = pious_opinion opinion = 50 } } stress_impact = { humble = medium_stress_impact_loss trusting = major_stress_impact_loss paranoid = minor_stress_impact_gain arrogant = medium_stress_impact_gain zealous = massive_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.25 ai_zeal = -0.75 } modifier = { #Weight up for stress. add = 20 has_trait = humble } modifier = { #Weight up for stress. add = 30 has_trait = trusting } modifier = { #Weight down for stress. add = -10 has_trait = paranoid } modifier = { #Weight down for stress. add = -20 has_trait = arrogant } modifier = { #Weight down for stress. add = -50 has_trait = zealous } } } #Give them the boot. option = { name = fp1_yearly.0041.c #Consolation prize for giving them the boot. ## Stress loss handled in stress_impact. stress_impact = { base = minor_stress_loss zealous = minor_stress_impact_loss shy = major_stress_impact_loss } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = -0.25 ai_sociability = -0.5 } modifier = { #Weight down for stress. add = -10 has_trait = zealous } modifier = { #Weight down for stress. add = -30 has_trait = shy } } } #Clean-up characters, if appropriate. after = { # We use a separate event delayed by a day so that scope:explorer isn't dead in the toasts. trigger_event = { id = fp1_yearly.0042 days = 1 } } } # Clean up unused explorer. fp1_yearly.0042 = { hidden = yes immediate = { #Get rid of scope:explorer, unless they've decided to stay. scope:explorer = { if = { limit = { NOT = { is_courtier_of = root } } hidden_effect = { death = { death_reason = death_vanished } } } } } } ################################################## # [Rural] A Dead Character is Rumoured to have become a Draugr # by Ewan Cowhig Croft # 0051 - 0070 ################################################## # You are informed of the reputed-draugr. fp1_yearly.0051 = { type = character_event title = fp1_yearly.0051.t desc = fp1_yearly.0051.desc theme = unfriendly left_portrait = { character = scope:draugr animation = personality_vengeful } override_background = { reference = throne_room } trigger = { #DLC check. has_fp1_dlc_trigger = yes #Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0051 } is_landed = yes #Must have a draugr candidate ready; this is set on the on_death on_action. has_variable = potential_draugr #Must be a tribal... government_has_flag = government_is_tribal #With a rural, North Germanic capital. capital_county = { #Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on. culture = { has_cultural_pillar = heritage_north_germanic } development_level <= terrible_development_level } } weight_multiplier = { base = 1 } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0051 days = 7300 } #Grab our capital for loc. capital_county = { save_scope_as = capital_county } #Then grab our draugr. var:potential_draugr = { save_scope_as = draugr } } #Investigate in person. option = { name = fp1_yearly.0051.a #You go off to investigate in person. custom_tooltip = fp1_yearly.0051.a.tt ##5 possible outcomes, weighing down the chance of nothing happening slightly due to low value, gives us x4 options of 22.5% & one of 10%. hidden_effect = { random_list = { #A pack of wolves! 225 = { trigger_event = { id = fp1_yearly.0061 months = 1 } } #A fearsome bear! 225 = { trigger_event = { id = fp1_yearly.0062 months = 1 } } #A nithing living in the mound! 225 = { trigger_event = { id = fp1_yearly.0063 months = 1 } } #An orphan living in the mound! 225 = { trigger_event = { id = fp1_yearly.0064 months = 1 } } #Absolutely bugger-all! 100 = { trigger_event = { id = fp1_yearly.0065 months = 1 } } } } stress_impact = { diligent = medium_stress_impact_loss brave = medium_stress_impact_loss lazy = medium_stress_impact_gain craven = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_energy = 0.25 } modifier = { #Weight up for stress. add = 20 has_trait = diligent } modifier = { #Weight down for stress. add = 20 has_trait = brave } modifier = { #Weight down for stress. add = -20 has_trait = lazy } modifier = { #Weight down for stress. add = -20 has_trait = craven } } } #Try various folk solutions. option = { name = fp1_yearly.0051.c #Let's see how your hearth wisdom is, chummer. duel = { skill = learning value = decent_skill_rating #Your potions and spells reassure the locals. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0051.c.tt_success send_interface_toast = { title = fp1_yearly.0051.c.tt_success left_icon = scope:draugr capital_county = { add_county_modifier = { modifier = draugr_remedies_succeeded_fp1_modifier years = 10 } } add_stress = medium_stress_loss } } #Your rituals are insufficient. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0051.c.tt_failure send_interface_toast = { title = fp1_yearly.0051.c.tt_failure left_icon = scope:draugr capital_county = { add_county_modifier = { modifier = draugr_remedies_failed_fp1_modifier years = 10 } } add_stress = medium_stress_gain } } } stress_impact = { lazy = minor_stress_impact_loss diligent = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_energy = 0.5 } modifier = { #Weight up for stress. add = 10 has_trait = lazy } modifier = { #Weight down for stress. add = -10 has_trait = diligent } } } #Have them exhumed and the corpse destroyed. option = { name = fp1_yearly.0051.b #Peasants are happy. send_interface_toast = { title = fp1_yearly.0051.b.body_destroyed left_icon = root capital_county = { add_county_modifier = { modifier = draugr_remedies_succeeded_fp1_modifier years = 10 } } } #But either the family of the deceased are not... if = { limit = { scope:draugr = { OR = { #Nab their entire house. AND = { house ?= { any_house_member = { count >= 1 is_alive = yes } } } #Any close family outside of that house (bastards, house-founder siblings, etc). any_close_or_extended_family_member = { count >= 1 is_alive = yes } #And any spouses still kicking around. any_former_spouse = { count >= 1 is_alive = yes } } } } #Nab scope:draugr's nearest'n'dearest. scope:draugr = { if = { limit = { exists = house } house = { every_house_member = { limit = { is_alive = yes } add_to_list = close_to_draugr_list } } } every_close_or_extended_family_member = { limit = { is_alive = yes } add_to_list = close_to_draugr_list } every_former_spouse = { limit = { is_alive = yes } add_to_list = close_to_draugr_list } } #And make them unhappy at the thing wot u dun. every_in_list = { list = close_to_draugr_list custom = fp1_yearly.0051.b.list add_opinion = { target = root modifier = fp1_desecrated_corpse_of_loved_one } } } #... Or you have to spend a little prestige for defiling the dead. else = { add_prestige = medium_prestige_loss } stress_impact = { vengeful = minor_stress_impact_loss callous = medium_stress_impact_loss arbitrary = medium_stress_impact_loss forgiving = minor_stress_impact_gain compassionate = medium_stress_impact_gain just = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.25 ai_compassion = -0.25 ai_honor = -0.5 } modifier = { #Weight up for stress. add = 10 has_trait = vengeful } modifier = { #Weight up for stress. add = 20 has_trait = callous } modifier = { #Weight up for stress. add = 20 has_trait = arbitrary } modifier = { #Weight down for stress. add = -10 has_trait = forgiving } modifier = { #Weight down for stress. add = -20 has_trait = compassionate } modifier = { #Weight down for stress. add = -20 has_trait = just } } } } # The draugr is earmarked. fp1_yearly.0052 = { hidden = yes trigger = { #DLC check. has_fp1_dlc_trigger = yes #Must be within the player's court. is_knight = yes court_owner = { is_ai = no } #Must be an intimidating fighter. prowess >= extremely_high_skill_rating #Aaaaand must have a personality that makes people think they'd come back to harass the living. calc_true_if = { amount >= 2 has_trait = wrathful has_trait = arrogant has_trait = deceitful has_trait = craven has_trait = ambitious has_trait = arbitrary has_trait = cynical has_trait = vengeful has_trait = sadistic } } immediate = { save_scope_as = potential_draugr court_owner = { set_variable = { name = potential_draugr value = scope:potential_draugr years = 5 } } } } # The draugr was a pack of wolves! fp1_yearly.0061 = { type = character_event title = fp1_yearly.0061.t desc = fp1_yearly.0061.desc theme = martial left_portrait = { character = root animation = shock } override_background = { reference = wilderness } trigger = { is_available_even_at_war_adult = yes } #Fight the wolves. option = { name = fp1_yearly.0061.a #You rally your soldiers to fight off the pack! duel = { skill = martial value = high_skill_rating #You slaughter the pack! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0061.a.tt_success send_interface_toast = { title = fp1_yearly.0061.a.tt_success left_icon = root capital_county = { add_county_modifier = { modifier = draugr_remedies_succeeded_fp1_modifier years = 10 } } add_prestige = medium_prestige_gain } } #You barely escape with your life! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0061.a.tt_failure send_interface_toast = { title = fp1_yearly.0061.a.tt_failure left_icon = root capital_county = { add_county_modifier = { modifier = draugr_monstrous_wolfpack_fp1_modifier years = 10 } } increase_wounds_effect = { REASON = wolves } } } } stress_impact = { brave = major_stress_impact_loss craven = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_honor = 0.25 } modifier = { #Weight up for stress. add = 30 has_trait = brave } modifier = { #Weight down for stress. add = -30 has_trait = craven } } } #Retreat! option = { name = fp1_yearly.0061.b #The wolves will be eating people for some time to come. capital_county = { add_county_modifier = { modifier = draugr_monstrous_wolfpack_fp1_modifier years = 10 } } #And e'eryone knows why. add_prestige = medium_prestige_loss stress_impact = { craven = major_stress_impact_loss brave = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.25 ai_boldness = -0.5 } modifier = { #Weight up for stress. add = 30 has_trait = craven } modifier = { #Weight down for stress. add = -30 has_trait = brave } } } } # The draugr was a bear! fp1_yearly.0062 = { type = character_event title = fp1_yearly.0062.t desc = fp1_yearly.0062.desc theme = martial left_portrait = { character = root animation = shock } override_background = { reference = wilderness } trigger = { is_available_even_at_war_adult = yes } #Fight the bear. option = { name = fp1_yearly.0062.a #You meet the bear's challenge! duel = { skill = prowess value = high_skill_rating #You kill the bear! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0062.a.tt_success send_interface_toast = { title = fp1_yearly.0062.a.tt_success left_icon = root capital_county = { add_county_modifier = { modifier = draugr_remedies_succeeded_fp1_modifier years = 10 } } add_prestige = medium_prestige_gain } } #You only just escape with your life! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0062.a.tt_failure send_interface_toast = { title = fp1_yearly.0062.a.tt_failure left_icon = root capital_county = { add_county_modifier = { modifier = draugr_monstrous_bear_fp1_modifier years = 10 } } increase_wounds_effect = { REASON = bear } } } } stress_impact = { brave = major_stress_impact_loss craven = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_honor = 0.25 } modifier = { #Weight up for stress. add = 30 has_trait = brave } modifier = { #Weight down for stress. add = -30 has_trait = craven } } } #Retreat! option = { name = fp1_yearly.0062.b #The bear will be eating people for some time to come. capital_county = { add_county_modifier = { modifier = draugr_monstrous_bear_fp1_modifier years = 10 } } #And e'eryone knows why. add_prestige = medium_prestige_loss stress_impact = { craven = major_stress_impact_loss brave = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.25 ai_boldness = -0.5 } modifier = { #Weight up for stress. add = 30 has_trait = craven } modifier = { #Weight down for stress. add = -30 has_trait = brave } } } } # The draugr was a nithing! fp1_yearly.0063 = { type = character_event title = fp1_yearly.0063.t desc = fp1_yearly.0063.desc theme = intrigue left_portrait = { character = root animation = disgust } right_portrait = { character = scope:draugr_nithing animation = shock } override_background = { reference = wilderness } trigger = { is_available_even_at_war_adult = yes } immediate = { #Create us a nithing! create_character = { location = root.capital_province template = fp1_capital_county_nithing_character save_scope_as = draugr_nithing } hidden_effect = { scope:draugr_nithing = { nithing_character_creation_scripted_effect = yes } } } #Try to catch the nithing before they slip away. option = { name = fp1_yearly.0063.a #You attempt to catch the criminal. duel = { skill = intrigue value = high_skill_rating #Your trap works! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0063.a.tt_success send_interface_toast = { title = fp1_yearly.0063.a.tt_success left_icon = root capital_county = { add_county_modifier = { modifier = draugr_remedies_succeeded_fp1_modifier years = 10 } } add_prestige = medium_prestige_gain #To the dungeon with you, m'nithing. imprison = { target = scope:draugr_nithing type = dungeon } } } #The nithing slips the net! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0063.a.tt_failure send_interface_toast = { title = fp1_yearly.0063.a.tt_failure left_icon = root capital_county = { add_county_modifier = { modifier = draugr_nithing_fp1_modifier years = 10 } } custom_tooltip = fp1_yearly.0063.a.tt_failure.draugr_nithing_escapes hidden_effect = { scope:draugr_nithing = { death = { death_reason = death_vanished } } } } } } stress_impact = { paranoid = minor_stress_impact_loss vengeful = medium_stress_impact_loss just = medium_stress_impact_loss forgiving = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_honor = 0.25 } modifier = { #Weight up for stress. add = 10 has_trait = paranoid } modifier = { #Weight up for stress. add = 20 has_trait = vengeful } modifier = { #Weight up for stress. add = 20 has_trait = just } modifier = { #Weight down for stress. add = -20 has_trait = forgiving } } } #Leave them to it. option = { name = fp1_yearly.0063.b #The nithing will continue to do your capital a mischief for quite a while. capital_county = { add_county_modifier = { modifier = draugr_nithing_fp1_modifier years = 10 } } #But at least it's less ignoble than running from wild animals. add_prestige = minor_prestige_loss stress_impact = { just = medium_stress_impact_loss vengeful = medium_stress_impact_loss arbitrary = minor_stress_impact_gain forgiving = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.25 ai_honor = -0.25 } modifier = { #Weight up for stress. add = 20 has_trait = just } modifier = { #Weight up for stress. add = 20 has_trait = vengeful } modifier = { #Weight down for stress. add = -10 has_trait = arbitrary } modifier = { #Weight down for stress. add = -20 has_trait = forgiving } } } } # The draugr was an orphan! fp1_yearly.0064 = { type = character_event title = fp1_yearly.0064.t desc = fp1_yearly.0064.desc theme = friendly left_portrait = { character = root animation = shock } right_portrait = { character = scope:draugr_orphan animation = fear } override_background = { reference = wilderness } trigger = { is_available_even_at_war_adult = yes } immediate = { #Create us an orphan! create_character = { location = root.capital_province template = fp1_capital_county_orphan_character save_scope_as = draugr_orphan } #And every possible result sorts the issue for you. capital_county = { add_county_modifier = { modifier = draugr_remedies_succeeded_fp1_modifier years = 10 } } } #Move them on. option = { name = fp1_yearly.0064.a #The orphan disappears. custom_tooltip = fp1_yearly.0064.a.tt hidden_effect = { scope:draugr_orphan = { death = { death_reason = death_vanished } } } stress_impact = { sadistic = minor_stress_impact_loss callous = major_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = 0.25 ai_compassion = -0.5 } modifier = { #Weight up for stress. add = 10 has_trait = sadistic } modifier = { #Weight up for stress. add = 30 has_trait = callous } modifier = { #Weight down for stress. add = -10 has_trait = compassionate } } } #Fling them into prison. option = { name = fp1_yearly.0064.b #You uhh, you get a prisoner. imprison = { target = scope:draugr_orphan type = dungeon } reverse_add_opinion = { target = scope:draugr_orphan modifier = imprisoned_me } #... Just for good measure, let's make sure they won't forget this. hidden_effect = { set_relation_potential_rival = scope:draugr_orphan } stress_impact = { callous = minor_stress_impact_loss sadistic = major_stress_impact_loss compassionate = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.25 ai_compassion = -0.75 } modifier = { #Weight up for stress. add = 10 has_trait = callous } modifier = { #Weight up for stress. add = 30 has_trait = sadistic } modifier = { #Weight down for stress. add = -30 has_trait = compassionate } } } #Take them to court. option = { name = fp1_yearly.0064.c #One shiny new child for you. add_courtier = scope:draugr_orphan #And they're pretty happy about being whisked out of the grave they were living in. reverse_add_opinion = { target = scope:draugr_orphan modifier = loyal_servant } add_hook = { target = scope:draugr_orphan type = loyalty_hook } stress_impact = { trusting = minor_stress_impact_loss compassionate = major_stress_impact_loss paranoid = minor_stress_impact_gain callous = medium_stress_impact_gain sadistic = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.25 ai_compassion = -0.75 } modifier = { #Weight up for stress. add = 10 has_trait = trusting } modifier = { #Weight up for stress. add = 30 has_trait = compassionate } modifier = { #Weight down for stress. add = -10 has_trait = paranoid } modifier = { #Weight down for stress. add = -20 has_trait = callous } modifier = { #Weight down for stress. add = -20 has_trait = sadistic } } } #Adopt them. option = { name = fp1_yearly.0064.d #And, if you've no kids of your own right now... trigger = { any_child = { count = 0 is_alive = yes } } #One shiny new child for you. if = { limit = { is_female = yes } scope:draugr_orphan = { set_mother = root } } else = { scope:draugr_orphan = { set_father = root } } hidden_effect = { #We take care of the sundries in a hidden effect so as not to put too much into the tooltip. scope:draugr_orphan = { set_house = root.house } add_courtier = scope:draugr_orphan } #And they're pretty happy about being the child of a lord all of a sudden. reverse_add_opinion = { target = scope:draugr_orphan modifier = love_opinion opinion = 100 } add_hook = { target = scope:draugr_orphan type = loyalty_hook } stress_impact = { trusting = medium_stress_impact_loss compassionate = massive_stress_impact_loss paranoid = medium_stress_impact_gain callous = major_stress_impact_gain sadistic = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.25 ai_compassion = -0.75 } modifier = { #Weight up for stress. add = 20 has_trait = trusting } modifier = { #Weight up for stress. add = 50 has_trait = compassionate } modifier = { #Weight down for stress. add = 20 has_trait = paranoid } modifier = { #Weight down for stress. add = -30 has_trait = callous } modifier = { #Weight down for stress. add = -30 has_trait = sadistic } } } } # The draugr was... didn't exist! fp1_yearly.0065 = { type = character_event title = fp1_yearly.0065.t desc = fp1_yearly.0065.desc theme = physical_health left_portrait = { character = root animation = boredom } override_background = { reference = wilderness } trigger = { is_available_even_at_war_adult = yes } #Must have been the wind? option = { name = fp1_yearly.0065.a #Welp, at least the fresh air does you good! add_character_modifier = { modifier = draugr_healthy_hiking_fp1_modifier years = 10 } #The locals grumble a little regardless. send_interface_toast = { title = fp1_yearly.0065.a.locals_grumble left_icon = root capital_county = { add_county_modifier = { modifier = draugr_nothing_found_fp1_modifier years = 10 } } } stress_impact = { #Usually bad form to give stress in one-event options, but it's a little funny to see your character's reaction to there being literally nothing to see. trusting = miniscule_stress_impact_loss paranoid = miniscule_stress_impact_gain } ai_chance = { #Only option. base = 100 } } } ################################################## # The Deep Places of the World # by Ewan Cowhig Croft # 0071 - 0090 ################################################## scripted_trigger fp1_0071_loveli_lakes_trigger = { has_trait = shieldmaiden is_courtier_of = root is_available_ai_adult = yes is_healthy = yes } scripted_trigger fp1_0071_valid_marshal_for_delegation_trigger = { exists = this is_available_ai_adult = yes } scripted_effect fp1_0071_apply_hungry_troll_modifier_effect = { capital_county = { add_county_modifier = { modifier = fp1_yearly_0071_troll_attacks_modifier years = 30 } } } # [Rural] A Troll has been sighted & is attacking villages/peasants fp1_yearly.0071 = { type = character_event title = fp1_yearly.0071.t desc = { desc = fp1_yearly.0071.desc.intro # Troll type. first_valid = { # A towering bear. triggered_desc = { trigger = { scope:troll_type = flag:bear } desc = fp1_yearly.0071.desc.troll_type.bear } # An ancient wolf. triggered_desc = { trigger = { scope:troll_type = flag:wolf } desc = fp1_yearly.0071.desc.troll_type.wolf } # A colossal wolverine. triggered_desc = { trigger = { scope:troll_type = flag:wolverine } desc = fp1_yearly.0071.desc.troll_type.wolverine } # A stealthy lynx. triggered_desc = { trigger = { scope:troll_type = flag:lynx } desc = fp1_yearly.0071.desc.troll_type.lynx } # An enraged moose. triggered_desc = { trigger = { scope:troll_type = flag:moose } desc = fp1_yearly.0071.desc.troll_type.moose } } # Outro type. first_valid = { triggered_desc = { trigger = { exists = scope:loveli_lakes } desc = fp1_yearly.0071.desc.outro.loveli_lakes } desc = fp1_yearly.0071.desc.outro.fallback } } theme = hunting left_portrait = { character = root animation = disbelief } right_portrait = { character = scope:marshal animation = dismissal } lower_left_portrait = scope:loveli_lakes override_background = { reference = throne_room } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0071 } is_landed = yes # Must be a tribal in Scandinavia. government_has_flag = government_is_tribal fp1_is_in_scandinavia = yes # With a rural, North Germanic capital. capital_county = { # Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on. culture = { has_cultural_pillar = heritage_north_germanic } development_level <= terrible_development_level # And ensure it doesn't already have a troll problem. NOT = { has_county_modifier = fp1_yearly_0071_troll_attacks_modifier } } } weight_multiplier = { base = 1 # Weight down a little if you're a hunter, since it means you're probably trimming the local wildlife down quite dramatically. modifier = { add = -0.5 has_trait = lifestyle_hunter } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0071 days = 1825 } # Roll to determine what type of beast we get. ## Five options of 20% each. random_list = { # A towering bear. 200 = { save_scope_value_as = { name = troll_type value = flag:bear } } # An ancient wolf. 200 = { save_scope_value_as = { name = troll_type value = flag:wolf } } # A colossal wolverine. 200 = { save_scope_value_as = { name = troll_type value = flag:wolverine } } # A stealthy lynx. 200 = { save_scope_value_as = { name = troll_type value = flag:lynx } } # An enraged moose. 200 = { save_scope_value_as = { name = troll_type value = flag:moose } } } ## Did a møøse bite root's sister? if = { limit = { scope:troll_type = flag:moose # We could go for a more complex implementation, but as we want to keep the meme rare (and therefore less stale), we hard-lock it down to just shieldmaidens. any_sibling = { fp1_0071_loveli_lakes_trigger = yes } } random_sibling = { limit = { fp1_0071_loveli_lakes_trigger = yes } save_scope_as = loveli_lakes } } # Grab the martial, if possible, for delegation. if = { limit = { any_martial_councillor = { fp1_0071_valid_marshal_for_delegation_trigger = yes } } random_martial_councillor = { limit = { fp1_0071_valid_marshal_for_delegation_trigger = yes } save_scope_as = marshal } } } # I'll kill the beast myself! option = { name = fp1_yearly.0071.a # Inform root that they'll get a follow-up event. custom_tooltip = fp1_yearly.0071.a.tt # Calc which event to send out. ## A towering bear. if = { limit = { scope:troll_type = flag:bear } trigger_event = { id = fp1_yearly.0081 days = 14 } } ## An ancient wolf. else_if = { limit = { scope:troll_type = flag:wolf } trigger_event = { id = fp1_yearly.0082 days = 14 } } ## A colossal wolverine. else_if = { limit = { scope:troll_type = flag:wolverine } trigger_event = { id = fp1_yearly.0083 days = 14 } } ## A stealthy lynx. else_if = { limit = { scope:troll_type = flag:lynx } trigger_event = { id = fp1_yearly.0084 days = 14 } } ## An enraged moose. else = { trigger_event = { id = fp1_yearly.0085 days = 14 } } stress_impact = { brave = minor_stress_impact_loss craven = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = 0.5 ai_vengefulness = 0.5 } modifier = { # Weight up for stress. add = 10 has_trait = brave } modifier = { # Weight down for stress. add = -10 has_trait = craven } } } # Scope:marshal, take care of this. option = { name = fp1_yearly.0071.b trigger = { exists = scope:marshal } # Martial duel for the marshal. scope:marshal = { duel = { skill = martial value = very_high_skill_rating # Your marshal and their troops hunt down the beast. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0071.b.tt_success root = { send_interface_toast = { title = fp1_yearly.0071.b.tt_success left_icon = scope:marshal # Huzzah! Everyone's a hero! scope:marshal = { add_prestige = major_prestige_gain } add_prestige = medium_prestige_gain } } } # The beast eludes scope:marshal and continues to stalk the province. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0071.b.tt_failure root = { send_interface_toast = { title = fp1_yearly.0071.b.tt_failure left_icon = scope:marshal # Welp, that's a lot of failure involved for everyone. scope:marshal = { add_prestige = major_prestige_loss } add_prestige = medium_prestige_loss # Capital_county isn't happy. fp1_0071_apply_hungry_troll_modifier_effect = yes } } } } } stress_impact = { craven = minor_stress_impact_loss lazy = medium_stress_impact_loss brave = minor_stress_impact_gain diligent = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = craven } modifier = { # Weight up for stress. add = 20 has_trait = lazy } modifier = { # Weight down for stress. add = -10 has_trait = brave } modifier = { # Weight down for stress. add = -20 has_trait = diligent } } } # It's probably just a bear. Deal with it yourselves, cravens. option = { name = fp1_yearly.0071.c # Gain some prestige for your toughness. add_prestige = minor_prestige_gain # But your capital county is upset. fp1_0071_apply_hungry_troll_modifier_effect = yes stress_impact = { cynical = minor_stress_impact_loss craven = medium_stress_impact_loss brave = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = -0.25 ai_honor = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = cynical } modifier = { # Weight up for stress. add = 20 has_trait = craven } modifier = { # Weight down for stress. add = -20 has_trait = brave } } } } scripted_effect fp1_0081_invalidation_toast_effect = { send_interface_toast = { title = fp1_yearly.0081.hunt_invalidated left_icon = root custom_tooltip = fp1_yearly.0081.hunt_invalidated.tt } } scripted_effect fp1_0081_troll_duel_victory_effect = { # Add unique character modifier. add_character_modifier = { modifier = $MODIFIER$ years = 20 } # And prestige. add_prestige = major_prestige_gain # Low chance for characters to become styled "Troll-Slayer". if = { limit = { has_any_nickname = no AND = { has_bad_nickname = yes is_ai = yes } } random = { chance = 25 give_nickname = nick_troll_slayer } } # Or automatically if they're players with bad nicknames. else_if = { limit = { has_bad_nickname = yes is_ai = no } give_nickname = nick_troll_slayer } } scripted_effect fp1_0081_troll_duel_effect = { duel = { skill = prowess value = high_skill_rating # You murderise the animal. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = $SUCCESS_TITLE$ send_interface_toast = { title = $SUCCESS_TITLE$ left_icon = root # Apply victory effects. fp1_0081_troll_duel_victory_effect = { MODIFIER = $MODIFIER$ } } } # The animal wounds you and your retinue carries you off. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = $FAILURE_TITLE$ send_interface_toast = { title = $FAILURE_TITLE$ left_icon = root # Capital_county is unhappy. fp1_0071_apply_hungry_troll_modifier_effect = yes # The beast kills you. death = { death_reason = $REASON$ } } } } } scripted_effect fp1_0081_troll_duel_alternate_effect = { duel = { skill = $SKILL$ value = high_skill_rating # You murderise the animal. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = $SUCCESS_TITLE$ send_interface_toast = { title = $SUCCESS_TITLE$ left_icon = root # Apply victory effects. fp1_0081_troll_duel_victory_effect = { MODIFIER = $MODIFIER$ } } } # The animal wounds you and your retinue carries you off. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = $FAILURE_TITLE$ send_interface_toast = { title = $FAILURE_TITLE$ left_icon = root # The beast merely maims you. custom_tooltip = $FAILURE_TITLE$.tt hidden_effect = { maimed_in_battle_effect = yes } # Capital_county is unhappy. fp1_0071_apply_hungry_troll_modifier_effect = yes } } } } scripted_effect fp1_0081_flee_option_effect = { # Lose prestige. add_prestige = medium_prestige_loss # Your capital county doesn't do too well, either. fp1_0071_apply_hungry_troll_modifier_effect = yes } # Troll: towering bear. fp1_yearly.0081 = { type = character_event title = fp1_yearly.0081.t desc = fp1_yearly.0081.desc theme = hunting left_portrait = { character = root animation = shock } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes is_landed = yes # Must be a tribal... government_has_flag = government_is_tribal # With a rural, North Germanic capital. capital_county = { # Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on. culture = { has_cultural_pillar = heritage_north_germanic } development_level <= terrible_development_level } } on_trigger_fail = { fp1_0081_invalidation_toast_effect = yes } immediate = { play_music_cue = "mx_cue_combat_stinger" } # Charge in, blade swinging. option = { name = fp1_yearly.0081.a trigger = { NOT = { has_trait = berserker } } # Risky prowess duel. fp1_0081_troll_duel_effect = { SUCCESS_TITLE = fp1_yearly.0081.a.tt_success FAILURE_TITLE = fp1_yearly.0081.a.tt_failure MODIFIER = fp1_yearly_0071_troll_victory_bear_modifier REASON = death_bear } #We need to check that they didn't die - if we apply stress to a dead character the error-log complains if = { limit = { is_alive = yes } stress_impact = { brave = major_stress_impact_loss craven = major_stress_impact_gain } } ai_chance = { base = 100 ai_value_modifier = { ai_honor = 0.5 ai_vengefulness = 0.5 } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # (Berserker) Auto-win due to Hulkery. option = { name = fp1_yearly.0081.b trigger = { has_trait = berserker } trait = berserker # Explain what's happening. custom_tooltip = fp1_yearly.0081.b.tt # And apply victory effects. fp1_0081_troll_duel_victory_effect = { MODIFIER = fp1_yearly_0071_troll_victory_bear_modifier } stress_impact = { berserker = massive_stress_impact_loss wrathful = major_stress_impact_loss calm = major_stress_impact_gain } ai_chance = { # The AI should basically always take this option, since it's both an automatic win and something representing a sudden & total loss of control. base = 10000 } } # Diplomacy: at it, Wolves of [Capital]! option = { name = fp1_yearly.0081.c # Risky diplomacy duel. fp1_0081_troll_duel_alternate_effect = { SKILL = diplomacy SUCCESS_TITLE = fp1_yearly.0081.c.tt_success FAILURE_TITLE = fp1_yearly.0081.c.tt_failure MODIFIER = fp1_yearly_0071_troll_victory_bear_modifier } stress_impact = { brave = medium_stress_impact_loss craven = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.5 ai_vengefulness = 0.5 ai_honor = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # FLEE! option = { name = fp1_yearly.0081.d # Apply flee effects. fp1_0081_flee_option_effect = yes stress_impact = { craven = major_stress_impact_loss brave = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress; weight up even further for cravens not wanting to immediately die. add = 1000 has_trait = craven } modifier = { # Weight down for stress. add = -30 has_trait = brave } } } } # Troll: ancient wolf. fp1_yearly.0082 = { type = character_event title = fp1_yearly.0082.t desc = fp1_yearly.0082.desc theme = hunting left_portrait = { character = root animation = shock } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes is_landed = yes # Must be a tribal... government_has_flag = government_is_tribal # With a rural, North Germanic capital. capital_county = { # Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on. culture = { has_cultural_pillar = heritage_north_germanic } development_level <= terrible_development_level } } on_trigger_fail = { fp1_0081_invalidation_toast_effect = yes } immediate = { play_music_cue = "mx_cue_combat_stinger" } # Charge in, blade swinging. option = { name = fp1_yearly.0082.a trigger = { NOT = { has_trait = berserker } } # Risky prowess duel. fp1_0081_troll_duel_effect = { SUCCESS_TITLE = fp1_yearly.0082.a.tt_success FAILURE_TITLE = fp1_yearly.0082.a.tt_failure MODIFIER = fp1_yearly_0071_troll_victory_wolf_modifier REASON = death_wolf } #We need to check that they didn't die - if we apply stress to a dead character the error-log complains if = { limit = { is_alive = yes } stress_impact = { brave = major_stress_impact_loss craven = major_stress_impact_gain } } ai_chance = { base = 100 ai_value_modifier = { ai_honor = 0.5 ai_vengefulness = 0.5 } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # (Berserker) Auto-win due to Hulkery. option = { name = fp1_yearly.0082.b trigger = { has_trait = berserker } trait = berserker # Explain what's happening. custom_tooltip = fp1_yearly.0082.b.tt # And apply victory effects. fp1_0081_troll_duel_victory_effect = { MODIFIER = fp1_yearly_0071_troll_victory_wolf_modifier } stress_impact = { berserker = massive_stress_impact_loss wrathful = major_stress_impact_loss calm = major_stress_impact_gain } ai_chance = { # The AI should basically always take this option, since it's both an automatic win and something representing a sudden & total loss of control. base = 10000 } } # Martial: rally! Form a circle! option = { name = fp1_yearly.0082.c # Risky martial duel. fp1_0081_troll_duel_alternate_effect = { SKILL = martial SUCCESS_TITLE = fp1_yearly.0082.c.tt_success FAILURE_TITLE = fp1_yearly.0082.c.tt_failure MODIFIER = fp1_yearly_0071_troll_victory_wolf_modifier } stress_impact = { brave = medium_stress_impact_loss craven = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.5 ai_vengefulness = 0.5 ai_honor = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # FLEE! option = { name = fp1_yearly.0082.d # Apply flee effects. fp1_0081_flee_option_effect = yes stress_impact = { craven = major_stress_impact_loss brave = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress; weight up even further for cravens not wanting to immediately die. add = 1000 has_trait = craven } modifier = { # Weight down for stress. add = -30 has_trait = brave } } } } # Troll: colossal wolverine. fp1_yearly.0083 = { type = character_event title = fp1_yearly.0083.t desc = fp1_yearly.0083.desc theme = hunting left_portrait = { character = root animation = shock } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes is_landed = yes # Must be a tribal... government_has_flag = government_is_tribal # With a rural, North Germanic capital. capital_county = { # Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on. culture = { has_cultural_pillar = heritage_north_germanic } development_level <= terrible_development_level } } on_trigger_fail = { fp1_0081_invalidation_toast_effect = yes } immediate = { play_music_cue = "mx_cue_combat_stinger" } # Charge in, blade swinging. option = { name = fp1_yearly.0083.a trigger = { NOT = { has_trait = berserker } } # Risky prowess duel. fp1_0081_troll_duel_effect = { SUCCESS_TITLE = fp1_yearly.0083.a.tt_success FAILURE_TITLE = fp1_yearly.0083.a.tt_failure MODIFIER = fp1_yearly_0071_troll_victory_wolverine_modifier REASON = death_wolverine } #We need to check that they didn't die - if we apply stress to a dead character the error-log complains if = { limit = { is_alive = yes } stress_impact = { brave = major_stress_impact_loss craven = major_stress_impact_gain } } ai_chance = { base = 100 ai_value_modifier = { ai_honor = 0.5 ai_vengefulness = 0.5 } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # (Berserker) Auto-win due to Hulkery. option = { name = fp1_yearly.0083.b trigger = { has_trait = berserker } trait = berserker # Explain what's happening. custom_tooltip = fp1_yearly.0083.b.tt # And apply victory effects. fp1_0081_troll_duel_victory_effect = { MODIFIER = fp1_yearly_0071_troll_victory_wolverine_modifier } stress_impact = { berserker = massive_stress_impact_loss wrathful = major_stress_impact_loss calm = major_stress_impact_gain } ai_chance = { # The AI should basically always take this option, since it's both an automatic win and something representing a sudden & total loss of control. base = 10000 } } # Stewardship: there's a lodge near here, fall back for reinforcements! option = { name = fp1_yearly.0083.c # Risky stewardship duel. fp1_0081_troll_duel_alternate_effect = { SKILL = stewardship SUCCESS_TITLE = fp1_yearly.0083.c.tt_success FAILURE_TITLE = fp1_yearly.0083.c.tt_failure MODIFIER = fp1_yearly_0071_troll_victory_wolverine_modifier } stress_impact = { brave = medium_stress_impact_loss craven = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.5 ai_vengefulness = 0.5 ai_honor = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # FLEE! option = { name = fp1_yearly.0083.d # Apply flee effects. fp1_0081_flee_option_effect = yes stress_impact = { craven = major_stress_impact_loss brave = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress; weight up even further for cravens not wanting to immediately die. add = 1000 has_trait = craven } modifier = { # Weight down for stress. add = -30 has_trait = brave } } } } # Troll: stealthy lynx. fp1_yearly.0084 = { type = character_event title = fp1_yearly.0084.t desc = fp1_yearly.0084.desc theme = hunting left_portrait = { character = root animation = shock } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes is_landed = yes # Must be a tribal... government_has_flag = government_is_tribal # With a rural, North Germanic capital. capital_county = { # Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on. culture = { has_cultural_pillar = heritage_north_germanic } development_level <= terrible_development_level } } on_trigger_fail = { fp1_0081_invalidation_toast_effect = yes } immediate = { play_music_cue = "mx_cue_combat_stinger" } # Charge in, blade swinging. option = { name = fp1_yearly.0084.a trigger = { NOT = { has_trait = berserker } } # Risky prowess duel. fp1_0081_troll_duel_effect = { SUCCESS_TITLE = fp1_yearly.0084.a.tt_success FAILURE_TITLE = fp1_yearly.0084.a.tt_failure MODIFIER = fp1_yearly_0071_troll_victory_lynx_modifier REASON = death_lynx } #We need to check that they didn't die - if we apply stress to a dead character the error-log complains if = { limit = { is_alive = yes } stress_impact = { brave = major_stress_impact_loss craven = major_stress_impact_gain } } ai_chance = { base = 100 ai_value_modifier = { ai_honor = 0.5 ai_vengefulness = 0.5 } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # (Berserker) Auto-win due to Hulkery. option = { name = fp1_yearly.0084.b trigger = { has_trait = berserker } trait = berserker # Explain what's happening. custom_tooltip = fp1_yearly.0084.b.tt # And apply victory effects. fp1_0081_troll_duel_victory_effect = { MODIFIER = fp1_yearly_0071_troll_victory_lynx_modifier } stress_impact = { berserker = massive_stress_impact_loss wrathful = major_stress_impact_loss calm = major_stress_impact_gain } ai_chance = { # The AI should basically always take this option, since it's both an automatic win and something representing a sudden & total loss of control. base = 10000 } } # Intrigue: quiet; you two flank it, we'll flush it towards you... option = { name = fp1_yearly.0084.c # Risky diplomacy duel. fp1_0081_troll_duel_alternate_effect = { SKILL = intrigue SUCCESS_TITLE = fp1_yearly.0084.c.tt_success FAILURE_TITLE = fp1_yearly.0084.c.tt_failure MODIFIER = fp1_yearly_0071_troll_victory_lynx_modifier } stress_impact = { brave = medium_stress_impact_loss craven = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.5 ai_vengefulness = 0.5 ai_honor = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # FLEE! option = { name = fp1_yearly.0084.d # Apply flee effects. fp1_0081_flee_option_effect = yes stress_impact = { craven = major_stress_impact_loss brave = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress; weight up even further for cravens not wanting to immediately die. add = 1000 has_trait = craven } modifier = { # Weight down for stress. add = -30 has_trait = brave } } } } # Troll: enraged moose. fp1_yearly.0085 = { type = character_event title = fp1_yearly.0085.t desc = { # Account for sibling violence. first_valid = { triggered_desc = { trigger = { exists = scope:loveli_lakes } desc = fp1_yearly.0085.desc.loveli_lakes } desc = fp1_yearly.0085.desc.fallback } } theme = hunting left_portrait = { character = root animation = shock } right_portrait = { character = scope:loveli_lakes animation = anger } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes is_landed = yes # Must be a tribal... government_has_flag = government_is_tribal # With a rural, North Germanic capital. capital_county = { # Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on. culture = { has_cultural_pillar = heritage_north_germanic } development_level <= terrible_development_level } } on_trigger_fail = { fp1_0081_invalidation_toast_effect = yes } immediate = { play_music_cue = "mx_cue_combat_stinger" } # Charge in, blade swinging. option = { name = fp1_yearly.0085.a trigger = { NOT = { has_trait = berserker } } # Risky prowess duel. fp1_0081_troll_duel_effect = { SUCCESS_TITLE = fp1_yearly.0085.a.tt_success FAILURE_TITLE = fp1_yearly.0085.a.tt_failure MODIFIER = fp1_yearly_0071_troll_victory_moose_modifier REASON = death_moose } #We need to check that they didn't die - if we apply stress to a dead character the error-log complains if = { limit = { is_alive = yes } stress_impact = { brave = major_stress_impact_loss craven = major_stress_impact_gain } } ai_chance = { base = 100 ai_value_modifier = { ai_honor = 0.5 ai_vengefulness = 0.5 } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # (Berserker) Auto-win due to Hulkery. option = { name = fp1_yearly.0085.b trigger = { has_trait = berserker } trait = berserker # Explain what's happening. custom_tooltip = fp1_yearly.0085.b.tt # And apply victory effects. fp1_0081_troll_duel_victory_effect = { MODIFIER = fp1_yearly_0071_troll_victory_moose_modifier } stress_impact = { berserker = massive_stress_impact_loss wrathful = major_stress_impact_loss calm = major_stress_impact_gain } ai_chance = { # The AI should basically always take this option, since it's both an automatic win and something representing a sudden & total loss of control. base = 10000 } } # Learning: remember its weak spot, spears and bows only! option = { name = fp1_yearly.0085.c # Risky learning duel. fp1_0081_troll_duel_alternate_effect = { SKILL = learning SUCCESS_TITLE = fp1_yearly.0085.c.tt_success FAILURE_TITLE = fp1_yearly.0085.c.tt_failure MODIFIER = fp1_yearly_0071_troll_victory_moose_modifier } stress_impact = { brave = medium_stress_impact_loss craven = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.5 ai_vengefulness = 0.5 ai_honor = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # FLEE! option = { name = fp1_yearly.0085.d # Apply flee effects. fp1_0081_flee_option_effect = yes stress_impact = { craven = major_stress_impact_loss brave = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress; weight up even further for cravens not wanting to immediately die. add = 1000 has_trait = craven } modifier = { # Weight down for stress. add = -30 has_trait = brave } } } } ################################################## # A Ship fit for a [ROOT.Char.GetTitleAsName] # by Ewan Cowhig Croft # 0090 - 0100 ################################################## # Commissioning a Longship for Yourself fp1_yearly.0091 = { type = character_event title = fp1_yearly.0091.t desc = fp1_yearly.0091.desc theme = martial left_portrait = { character = root animation = personality_rational } override_background = { reference = fp1_beached_longships } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0091 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_coastal_norse_tribal = yes } weight_multiplier = { base = 1 # Weight up for having sea-faring traits. modifier = { add = 0.5 has_trait = viking } modifier = { add = 0.5 has_trait = adventurer } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0091 days = 10950 } } # A leviathan, to carry my spoils! option = { name = fp1_yearly.0091.a trigger = { can_make_expensive_purchase_trigger = { PRICE = fp1_0091_standard_ship_gold_cost } } # Get a modifier enhancing loot capacity. add_character_modifier = { modifier = fp1_flagship_leviathan_modifier years = 10 } # And charge the gold cost. remove_short_term_gold = major_gold_value stress_impact = { profligate = massive_stress_impact_loss ambitious = major_stress_impact_loss content = major_stress_impact_gain greedy = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_energy = 0.5 ai_greed = -0.5 } modifier = { # Weight up for stress. add = 50 has_trait = profligate } modifier = { # Weight up for stress. add = 30 has_trait = ambitious } modifier = { # Weight down for stress. add = -30 has_trait = content } modifier = { # Weight down for stress. add = -30 has_trait = greedy } } } # A monster, to intimidate my vassals! option = { name = fp1_yearly.0091.b trigger = { can_make_expensive_purchase_trigger = { PRICE = fp1_0091_standard_ship_gold_cost } } # Get a modifier giving more tax from cowed vassals. add_character_modifier = { modifier = fp1_flagship_monster_modifier years = 10 } # And charge the gold cost. remove_short_term_gold = major_gold_value stress_impact = { profligate = massive_stress_impact_loss callous = major_stress_impact_loss sadistic = major_stress_impact_loss compassionate = major_stress_impact_gain greedy = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_vengefulness = 0.5 ai_greed = -0.5 } modifier = { # Weight up for stress. add = 50 has_trait = profligate } modifier = { # Weight up for stress. add = 30 has_trait = callous } modifier = { # Weight up for stress. add = 30 has_trait = sadistic } modifier = { # Weight down for stress. add = -30 has_trait = compassionate } modifier = { # Weight down for stress. add = -30 has_trait = greedy } } } # A dragon, to roar my name! option = { name = fp1_yearly.0091.c trigger = { can_make_expensive_purchase_trigger = { PRICE = fp1_0091_standard_ship_gold_cost } } # Get a modifier granting diplomacy per prestige level add_character_modifier = { modifier = fp1_flagship_dragon_modifier years = 10 } # And charge the gold cost. remove_short_term_gold = major_gold_value stress_impact = { profligate = massive_stress_impact_loss arrogant = major_stress_impact_loss humble = major_stress_impact_gain greedy = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_sociability = 0.5 ai_greed = -0.5 } modifier = { # Weight up for stress. add = 50 has_trait = profligate } modifier = { # Weight up for stress. add = 30 has_trait = arrogant } modifier = { # Weight down for stress. add = -30 has_trait = humble } modifier = { # Weight down for stress. add = -30 has_trait = greedy } } } # These are all ludicrously costly... option = { name = fp1_yearly.0091.d # Consiliatory stress loss for hanging on to your cash. ## Stress loss handled in stress impact. stress_impact = { base = minor_stress_loss greedy = medium_stress_impact_loss arrogant = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_greed = 0.5 ai_boldness = -0.25 } modifier = { # Weight up for stress. add = 20 has_trait = greedy } modifier = { # Weight down for stress. add = -10 has_trait = arrogant } } } } ################################################## # A Guest/Courtier Challenges you to Riddles # by Ewan Cowhig Croft # 0101 - 0110 ################################################## scripted_trigger fp1_valid_riddler_at_court_trigger = { # We want characters of minor or major interest, ideally. is_of_major_or_minor_interest_trigger = { CHARACTER = root } # And we want to make sure they're available and can speak. is_available_ai_adult = yes } # Someone in your court challenges you to an idle game of riddles. fp1_yearly.0101 = { type = character_event title = fp1_yearly.0101.t desc = fp1_yearly.0101.desc theme = diplomacy left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:riddler animation = schadenfreude } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0101 } is_landed = yes # Valid for North Germanics only. culture = { has_cultural_pillar = heritage_north_germanic } # Has a valid courtier/guest who can quiz you. any_courtier_or_guest = { fp1_valid_riddler_at_court_trigger = yes } # Doesn't have an established extreme hatred of riddles. NOT = { has_character_flag = fp1_yearly_0101_really_hates_riddles } } weight_multiplier = { base = 1 # Weight up for traits that make you a known woman/man of letters. modifier = { add = 0.5 has_trait = journaller } modifier = { add = 0.5 has_trait = scholar } modifier = { add = 0.5 has_trait = theologian } modifier = { add = 0.5 has_trait = administrator } modifier = { add = 0.5 has_trait = architect } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0101 days = 1825 } # Designate a suitable riddler. ## First, we grab all possibles & sort them into a list. every_courtier_or_guest = { limit = { fp1_valid_riddler_at_court_trigger = yes } add_to_list = potential_valid_riddlers_list } ## Then, we order that list appropriately. ordered_in_list = { list = potential_valid_riddlers_list order_by = { value = fp1_best_available_riddler_value } save_scope_as = riddler } } # Entertaining, I'll play! [diplo] option = { name = fp1_yearly.0101.a # Duel the courtier for it. duel = { skill = diplomacy target = scope:riddler # You win the game! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0101.a.tt_success send_interface_toast = { title = fp1_yearly.0101.a.tt_success left_icon = scope:riddler # Gain opinion with your court for participating. every_courtier_or_guest = { limit = { is_available_adult = yes } custom = fp1_yearly.0101.a.every_courtier_and_guest add_opinion = { target = root modifier = amused_opinion opinion = 20 } } # And a little prestige as a side-prize. add_prestige = miniscule_prestige_gain } } # You lose the game! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0101.a.tt_failure send_interface_toast = { title = fp1_yearly.0101.a.tt_failure left_icon = scope:riddler # Gain opinion with your court for participating. every_courtier_or_guest = { limit = { is_available_adult = yes } custom = fp1_yearly.0101.a.every_courtier_and_guest add_opinion = { target = root modifier = amused_opinion opinion = 20 } } # And lose a little prestige. add_prestige = minor_prestige_loss } } } stress_impact = { arrogant = minor_stress_impact_loss gregarious = medium_stress_impact_loss shy = minor_stress_impact_gain impatient = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.75 ai_boldness = 0.5 } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight up for stress. add = 20 has_trait = gregarious } modifier = { # Weight down for stress. add = -10 has_trait = shy } modifier = { # Weight down for stress. add = -20 has_trait = impatient } } } # Entertaining, I'll play! [learning] option = { name = fp1_yearly.0101.b duel = { skill = learning target = scope:riddler # You win the game! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0101.a.tt_success send_interface_toast = { title = fp1_yearly.0101.a.tt_success left_icon = scope:riddler # Gain opinion with your court for participating. every_courtier_or_guest = { limit = { is_available_adult = yes } custom = fp1_yearly.0101.a.every_courtier_and_guest add_opinion = { target = root modifier = amused_opinion opinion = 20 } } # And a little prestige as a side-prize. add_prestige = miniscule_prestige_gain } } # You lose the game! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0101.a.tt_failure send_interface_toast = { title = fp1_yearly.0101.a.tt_failure left_icon = scope:riddler # Gain opinion with your court for participating. every_courtier_or_guest = { limit = { is_available_adult = yes } custom = fp1_yearly.0101.a.every_courtier_and_guest add_opinion = { target = root modifier = amused_opinion opinion = 20 } } # And lose a little prestige. add_prestige = minor_prestige_loss } } } stress_impact = { arrogant = minor_stress_impact_loss gregarious = medium_stress_impact_loss shy = minor_stress_impact_gain impatient = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.75 ai_boldness = 0.5 } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight up for stress. add = 20 has_trait = gregarious } modifier = { # Weight down for stress. add = -10 has_trait = shy } modifier = { # Weight down for stress. add = -20 has_trait = impatient } } } # Here's one: who has no brain and belongs in the dungeon? option = { name = fp1_yearly.0101.c # Toss them in the dungeon. imprison_character_effect = { IMPRISONER = root TARGET = scope:riddler } hidden_effect = { # Make sure that it's _definitely_ the dungeon. scope:riddler = { change_prison_type = dungeon } # And that no one will ever try to get you involved in a game ever again. add_character_flag = fp1_yearly_0101_really_hates_riddles } # Gain some dread to balance out that tyranny. add_dread = medium_dread_gain # People may remember your over-reaction... if = { limit = { has_any_nickname = no } custom_tooltip = fp1_yearly.0101.c.tt hidden_effect = { random_list = { 60 = { # The court dares not mock you. } 40 = { # You hear a whispered nickname behind your back... random_list = { 20 = { send_interface_toast = { title = fp1_yearly.0101.c.tt_nickname left_icon = root give_nickname = nick_the_stonefaced } } 20 = { send_interface_toast = { title = fp1_yearly.0101.c.tt_nickname left_icon = root give_nickname = nick_the_dry } } 20 = { send_interface_toast = { title = fp1_yearly.0101.c.tt_nickname left_icon = root give_nickname = nick_the_joyless } } 20 = { send_interface_toast = { title = fp1_yearly.0101.c.tt_nickname left_icon = root give_nickname = nick_lacks_laughs } } 20 = { send_interface_toast = { title = fp1_yearly.0101.c.tt_nickname left_icon = root give_nickname = nick_the_dull } } } } } } } stress_impact = { sadistic = minor_stress_impact_loss impatient = medium_stress_impact_loss vengeful = medium_stress_impact_loss gregarious = minor_stress_impact_gain compassionate = medium_stress_impact_gain patient = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_compassion = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = sadistic } modifier = { # Weight up for stress. add = 20 has_trait = impatient } modifier = { # Weight up for stress. add = 20 has_trait = vengeful } modifier = { # Weight down for stress. add = -10 has_trait = gregarious } modifier = { # Weight down for stress. add = -20 has_trait = compassionate } modifier = { # Weight down for stress. add = -20 has_trait = patient } } } # Thanks, but I'm a [title], and have things to do. option = { name = fp1_yearly.0101.d # Lose a little prestige, but less than if you were beaten. add_prestige = miniscule_prestige_loss # Scope:riddler is disappointed in you. scope:riddler = { add_opinion = { target = root modifier = disappointed_opinion opinion = -20 } } stress_impact = { shy = minor_stress_impact_loss impatient = medium_stress_impact_loss arrogant = minor_stress_impact_gain gregarious = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = -0.5 ai_sociability = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = shy } modifier = { # Weight up for stress. add = 20 has_trait = impatient } modifier = { # Weight down for stress. add = -10 has_trait = arrogant } modifier = { # Weight down for stress. add = -20 has_trait = gregarious } } } } ################################################## # Accursed # by Ewan Cowhig Croft # 0111 - 0120 ################################################## scripted_trigger fp1_0111_superstitious_courtier_trigger = { # Basic checks. is_available_ai_adult = yes OR = { fp1_is_norse = yes religion = religion:germanic_religion } # Rule out a few key traits. NOR = { # Cynical characters don't believe. has_trait = cynical # Brave characters don't succumb to threats. has_trait = brave # Trusting characters believe the gods or their friends will help them. has_trait = trusting } # Witches aren't fussed: they're confident in their counterspells. NOR = { has_trait = witch any_secret = { type = secret_witch } } # Anyone who's already been cursed is about as screwed as they can be. NOT = { has_character_modifier = fp1_cursed_by_nithing_pole_modifier } # And we ideally want to be able to add a strong hook, at least. save_temporary_scope_as = current_courtier root = { can_add_hook = { target = scope:current_courtier type = loyalty_hook } } } scripted_trigger fp1_0111_suspicious_courtier_trigger = { # Basic checks. is_available_ai_adult = yes this != scope:accursed OR = { fp1_is_norse = yes religion = religion:germanic_religion } # Would-be sorcerers need to either know what they're doing, or else have absolutely no clue. OR = { intrigue >= fp1_0111_sorcerer_intrigue_high learning >= fp1_0111_sorcerer_learning_high intrigue <= fp1_0111_sorcerer_intrigue_low learning <= fp1_0111_sorcerer_learning_low } # ... and to have at least two of various pairs of matched traits. calc_true_if = { amount >= 2 OR = { has_trait = lazy has_trait = arbitrary } OR = { has_trait = wrathful has_trait = impatient } OR = { has_trait = calm has_trait = patient } OR = { has_trait = sadistic has_trait = arrogant } OR = { has_trait = callous has_trait = ambitious } OR = { has_trait = deceitful has_trait = craven } OR = { has_trait = brave has_trait = trusting } OR = { has_trait = paranoid has_trait = vengeful } } # Filter out known witches: *way* too obvious. NOT = { has_trait = witch } } scripted_trigger fp1_0111_discountable_courtier_trigger = { # Basic checks. is_available_ai_adult = yes this != scope:accursed OR = { fp1_is_norse = yes religion = religion:germanic_religion } # Discountables must not meet minimum requirements to be suspicious. fp1_0111_suspicious_courtier_trigger = no # On top of that, as long as they have at least one disqualifying statistic, they're gucci. OR = { has_trait = gallant has_trait = honest has_trait = just has_trait = compassionate has_trait = forgiving # Zealous characters require witchcraft to be at least somewhat shameful. AND = { has_trait = zealous faith = { NOT = { has_doctrine_parameter = witchcraft_accepted } } } } # Ensure that no witches are thrown into the discountables pile, as that's just cruel. NOR = { has_trait = witch any_secret = { type = secret_witch } } } scripted_effect fp1_0111_randomise_sorcerer_identity_effect = { random_list = { 100 = { trigger = { NOT = { exists = scope:suspect_a } } save_scope_as = suspect_a } 100 = { trigger = { NOT = { exists = scope:suspect_b } } save_scope_as = suspect_b } 100 = { trigger = { NOT = { exists = scope:suspect_c } } save_scope_as = suspect_c } } } scripted_effect fp1_0111_accursed_receives_curse_effect = { # Firstly, they gain a *colossal* amount of stress. add_stress = monumental_stress_gain # Then they take a negative modifier. add_character_modifier = { modifier = fp1_cursed_by_nithing_pole_modifier years = 20 } # And become paranoid if possible. if = { limit = { number_of_personality_traits < personality_trait_limit NOR = { has_trait = trusting has_trait = paranoid } } add_trait = paranoid } } scripted_effect fp1_0111_correct_accusation_effect = { # Give $CHARACTER$ a witch secret & expose it. $CHARACTER$ = { # Hide the witch effect, so that you can't just *see* who the witch is by who'll be exposed. hidden_effect = { random_secret = { type = secret_witch expose_secret = root } } # Simply show a nice, easy tooltip. show_as_tooltip = { add_trait = witch } } # Rightfully imprison them. rightfully_imprison_character_effect = { TARGET = $CHARACTER$ IMPRISONER = root } # Gain a nicely chonky chunk of prestige. add_prestige = medium_prestige_gain # Receive a strong hook on, and oodles of opinion with, scope:accursed. add_hook = { type = loyalty_hook target = scope:accursed } reverse_add_opinion = { target = scope:accursed modifier = relieved_opinion opinion = 75 } } scripted_effect fp1_0111_false_accusation_effect = { # $CHARACTER$ is, understandably, upset. reverse_add_opinion = { target = $CHARACTER$ modifier = falsely_accused } # And you lose some prestige for your failure. add_prestige = medium_prestige_loss # Scope:accursed has a melt-down. scope:accursed = { fp1_0111_accursed_receives_curse_effect = yes } } scripted_effect fp1_0111_select_accusation_effect = { # Inform root about the potential consequences of their guess. show_as_tooltip = { random_list = { # Guessed correctly. 100 = { show_chance = no desc = fp1_yearly.0111.tt.correct_guess fp1_0111_correct_accusation_effect = { CHARACTER = $CHARACTER$ } } # Guessed incorrectly. 100 = { show_chance = no desc = fp1_yearly.0111.tt.wrong_guess fp1_0111_false_accusation_effect = { CHARACTER = $CHARACTER$ } } } } # And handle the actual results. ## Guessed correctly! if = { limit = { $CHARACTER$ = scope:culprit } send_interface_toast = { title = fp1_yearly.0111.tt.correct_accusation left_icon = $CHARACTER$ right_icon = scope:accursed # Calculate actual effects: we have to keep these hidden so as not to spoil the mystery. hidden_effect = { fp1_0111_correct_accusation_effect = { CHARACTER = $CHARACTER$ } } # And throw in a tooltip to make the toast seem less empty. custom_tooltip = fp1_yearly.0111.tt.correct_accusation.tt } } ## Otherwise, you dun goofed. else = { send_interface_toast = { title = fp1_yearly.0111.tt.false_accusation left_icon = $CHARACTER$ right_icon = scope:accursed # Calculate actual effects: we have to keep these hidden so as not to spoil the mystery. hidden_effect = { fp1_0111_false_accusation_effect = { CHARACTER = $CHARACTER$ } } # And throw in a tooltip to make the toast seem less empty. custom_tooltip = fp1_yearly.0111.tt.false_accusation.tt } } } # Nithing Pole Raised Against Courtier fp1_yearly.0111 = { type = character_event title = fp1_yearly.0111.t desc = { desc = fp1_yearly.0111.desc.intro # Skill clue. first_valid = { triggered_desc = { trigger = { scope:clue_skill = flag:intrigue intrigue >= fp1_0111_sorcerer_intrigue_high } desc = fp1_yearly.0111.desc.skill.intrigue_high } triggered_desc = { trigger = { scope:clue_skill = flag:learning learning >= fp1_0111_sorcerer_learning_high } desc = fp1_yearly.0111.desc.skill.learning_high } triggered_desc = { trigger = { scope:clue_skill = flag:intrigue intrigue <= fp1_0111_sorcerer_intrigue_low } desc = fp1_yearly.0111.desc.skill.intrigue_low } triggered_desc = { trigger = { scope:clue_skill = flag:learning learning <= fp1_0111_sorcerer_learning_low } desc = fp1_yearly.0111.desc.skill.learning_low } desc = fp1_yearly.0111.desc.skill.fallback } # Grammatical stop. desc = fp1_yearly.0111.desc.first_connector # Trait clue #1. first_valid = { triggered_desc = { trigger = { scope:clue_trait_1 = flag:lazy_or_arbitrary } desc = fp1_yearly.0111.desc.trait_1.lazy_or_arbitrary } triggered_desc = { trigger = { scope:clue_trait_1 = flag:wrathful_or_impatient } desc = fp1_yearly.0111.desc.trait_1.wrathful_or_impatient } triggered_desc = { trigger = { scope:clue_trait_1 = flag:calm_or_patient } desc = fp1_yearly.0111.desc.trait_1.calm_or_patient } triggered_desc = { trigger = { scope:clue_trait_1 = flag:sadistic_or_arrogant } desc = fp1_yearly.0111.desc.trait_1.sadistic_or_arrogant } triggered_desc = { trigger = { scope:clue_trait_1 = flag:callous_or_ambitious } desc = fp1_yearly.0111.desc.trait_1.callous_or_ambitious } triggered_desc = { trigger = { scope:clue_trait_1 = flag:deceitful_or_craven } desc = fp1_yearly.0111.desc.trait_1.deceitful_or_craven } triggered_desc = { trigger = { scope:clue_trait_1 = flag:brave_or_trusting } desc = fp1_yearly.0111.desc.trait_1.brave_or_trusting } triggered_desc = { trigger = { scope:clue_trait_1 = flag:paranoid_or_vengeful } desc = fp1_yearly.0111.desc.trait_1.paranoid_or_vengeful } desc = fp1_yearly.0111.desc.trait_1.fallback } # Grammatical stop. desc = fp1_yearly.0111.desc.second_connector # Trait clue #2. first_valid = { triggered_desc = { trigger = { scope:clue_trait_2 = flag:lazy_or_arbitrary } desc = fp1_yearly.0111.desc.trait_2.lazy_or_arbitrary } triggered_desc = { trigger = { scope:clue_trait_2 = flag:wrathful_or_impatient } desc = fp1_yearly.0111.desc.trait_2.wrathful_or_impatient } triggered_desc = { trigger = { scope:clue_trait_2 = flag:calm_or_patient } desc = fp1_yearly.0111.desc.trait_2.calm_or_patient } triggered_desc = { trigger = { scope:clue_trait_2 = flag:sadistic_or_arrogant } desc = fp1_yearly.0111.desc.trait_2.sadistic_or_arrogant } triggered_desc = { trigger = { scope:clue_trait_2 = flag:callous_or_ambitious } desc = fp1_yearly.0111.desc.trait_2.callous_or_ambitious } triggered_desc = { trigger = { scope:clue_trait_2 = flag:deceitful_or_craven } desc = fp1_yearly.0111.desc.trait_2.deceitful_or_craven } triggered_desc = { trigger = { scope:clue_trait_2 = flag:brave_or_trusting } desc = fp1_yearly.0111.desc.trait_2.brave_or_trusting } triggered_desc = { trigger = { scope:clue_trait_2 = flag:paranoid_or_vengeful } desc = fp1_yearly.0111.desc.trait_2.paranoid_or_vengeful } desc = fp1_yearly.0111.desc.trait_2.fallback } desc = fp1_yearly.0111.desc.outro } theme = intrigue left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:accursed animation = fear } lower_left_portrait = scope:suspect_a lower_center_portrait = scope:suspect_b lower_right_portrait = scope:suspect_c override_background = { reference = corridor_night } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0111 } is_landed = yes # Filter to flavour-appropriate characters. faith = { NOT = { has_doctrine_parameter = witchcraft_accepted } } OR = { fp1_is_norse_tribal = yes # Allow this after feudalisation, but not for kings and emperors with more important things going on. AND = { fp1_is_norse = yes highest_held_title_tier <= tier_duchy } } # Make sure we have a suitably superstitious character for scope:courtier. any_courtier = { fp1_0111_superstitious_courtier_trigger = yes save_temporary_scope_as = accursed } # And that they've got enemies available. any_courtier_or_guest = { # Count one more than we need so that we've still got a valid scope:accursed even if they accidentally take up a suspect slot. count >= 4 fp1_0111_suspicious_courtier_trigger = yes } } weight_multiplier = { base = 1 # Witches see more of this type of thing in their court. modifier = { add = 1 has_trait = witch } # And zealots are more likely to be appealed to by terrified courtiers. modifier = { add = 0.5 has_trait = zealous } } immediate = { play_music_cue = "mx_cue_murder" add_character_flag = { flag = had_event_fp1_yearly_0111 days = 7300 } # Designate a suitable superstitious courtier. random_courtier = { limit = { fp1_0111_superstitious_courtier_trigger = yes } weight = { base = 0 # Weigh up the paranoid. modifier = { add = 100 has_trait = paranoid } # Weigh up zealots. modifier = { add = 50 has_trait = zealous } # And the vengeful, just a little, for assuming everyone thinks like them. modifier = { add = 25 has_trait = vengeful } } save_scope_as = accursed } # Next, grab all valid suspicious courtiers every_courtier_or_guest = { limit = { fp1_0111_suspicious_courtier_trigger = yes } add_to_list = suspicious_courtiers_list } # And all valid discountables. every_courtier_or_guest = { limit = { fp1_0111_discountable_courtier_trigger = yes } add_to_list = discountable_courtiers_list } # Process candidates. ## First, scope:culprit. random_in_list = { list = suspicious_courtiers_list weight = { base = 1 # Weight up anyone with the witch secret for the main suspect. modifier = { add = 1000 any_secret = { type = secret_witch } } } save_scope_as = culprit } ## Then, scope:red_herring. random_in_list = { list = suspicious_courtiers_list limit = { NOR = { this = scope:culprit # Forbid secret witches: that's *too* much of a red herring. any_secret = { type = secret_witch } } } save_scope_as = red_herring } ## Try for a scope:discountable. if = { limit = { any_in_list = { list = discountable_courtiers_list count >= 1 } } random_in_list = { list = discountable_courtiers_list save_scope_as = discountable } } ## If no scope:discountable is available, pick a scope:scarlet_herring. else = { random_in_list = { list = suspicious_courtiers_list limit = { NOR = { this = scope:culprit this = scope:red_herring # Forbid secret witches: that's *too* much of a red herring. any_secret = { type = secret_witch } } } save_scope_as = scarlet_herring } } # Then hand out suspect tags at random, so that it's not just always scope:suspect_a. ## First, sort scope:culprit. scope:culprit = { fp1_0111_randomise_sorcerer_identity_effect = yes } ## Next, scope:red_herring. scope:red_herring = { fp1_0111_randomise_sorcerer_identity_effect = yes } ## If we have a scope:discountable, finish with them. if = { limit = { exists = scope:discountable } scope:discountable = { fp1_0111_randomise_sorcerer_identity_effect = yes } } ## Otherwise, it's scope:scarlet_herring's turn. else = { scope:scarlet_herring = { fp1_0111_randomise_sorcerer_identity_effect = yes } } # Process clues. scope:culprit = { # First, we pick one of scope:culprit's skills to examine. ## The base is just a straight 50:50 shot between intrigue & learning, but we weight it a list by education. random_list = { # Intrigue. 1000 = { save_scope_value_as = { name = clue_skill value = flag:intrigue } # Weight up for education. modifier = { add = 250 has_trait_rank = { trait = education_intrigue rank = 1 } } modifier = { add = 500 has_trait_rank = { trait = education_intrigue rank = 2 } } modifier = { add = 750 has_trait_rank = { trait = education_intrigue rank = 3 } } modifier = { add = 1000 has_trait_rank = { trait = education_intrigue rank >= 4 } } } # Learning. 1000 = { save_scope_value_as = { name = clue_skill value = flag:learning } # Weight up for education. modifier = { add = 250 has_trait_rank = { trait = education_learning rank = 1 } } modifier = { add = 500 has_trait_rank = { trait = education_learning rank = 2 } } modifier = { add = 750 has_trait_rank = { trait = education_learning rank = 3 } } modifier = { add = 1000 has_trait_rank = { trait = education_learning rank >= 4 } } } } # Then, we want to look through their traits and pick a first pair to comment on. ## Eight options of 12.5% each. random_list = { # Lazy or arbitrary 125 = { trigger = { OR = { has_trait = lazy has_trait = arbitrary } } save_scope_value_as = { name = clue_trait_1 value = flag:lazy_or_arbitrary } } # Wrathful or impatient. 125 = { trigger = { OR = { has_trait = wrathful has_trait = impatient } } save_scope_value_as = { name = clue_trait_1 value = flag:wrathful_or_impatient } } # Calm or patient. 125 = { trigger = { OR = { has_trait = calm has_trait = patient } } save_scope_value_as = { name = clue_trait_1 value = flag:calm_or_patient } } # Sadistic or arrogant. 125 = { trigger = { OR = { has_trait = sadistic has_trait = arrogant } } save_scope_value_as = { name = clue_trait_1 value = flag:sadistic_or_arrogant } } # Callous or ambitious. 125 = { trigger = { OR = { has_trait = callous has_trait = ambitious } } save_scope_value_as = { name = clue_trait_1 value = flag:callous_or_ambitious } } # Deceitful or craven. 125 = { trigger = { OR = { has_trait = deceitful has_trait = craven } } save_scope_value_as = { name = clue_trait_1 value = flag:deceitful_or_craven } } # Brave or trusting. 125 = { trigger = { OR = { has_trait = brave has_trait = trusting } } save_scope_value_as = { name = clue_trait_1 value = flag:brave_or_trusting } } # Paranoid or vengeful. 125 = { trigger = { OR = { has_trait = paranoid has_trait = vengeful } } save_scope_value_as = { name = clue_trait_1 value = flag:paranoid_or_vengeful } } } # Finally, pick a secondary trait pairing. ## Technically eight options of 12.5% each, but one of these is discounted for the first pairing, so it's actually seven pairings of 14.3% each. random_list = { # Lazy or arbitrary 125 = { trigger = { OR = { has_trait = lazy has_trait = arbitrary } NOT = { scope:clue_trait_1 = flag:lazy_or_arbitrary } } save_scope_value_as = { name = clue_trait_2 value = flag:lazy_or_arbitrary } } # Wrathful or impatient. 125 = { trigger = { OR = { has_trait = wrathful has_trait = impatient } NOT = { scope:clue_trait_1 = flag:wrathful_or_impatient } } save_scope_value_as = { name = clue_trait_2 value = flag:wrathful_or_impatient } } # Calm or patient. 125 = { trigger = { OR = { has_trait = calm has_trait = patient } NOT = { scope:clue_trait_1 = flag:calm_or_patient } } save_scope_value_as = { name = clue_trait_2 value = flag:calm_or_patient } } # Sadistic or arrogant. 125 = { trigger = { OR = { has_trait = sadistic has_trait = arrogant } NOT = { scope:clue_trait_1 = flag:sadistic_or_arrogant } } save_scope_value_as = { name = clue_trait_2 value = flag:sadistic_or_arrogant } } # Callous or ambitious. 125 = { trigger = { OR = { has_trait = callous has_trait = ambitious } NOT = { scope:clue_trait_1 = flag:callous_or_ambitious } } save_scope_value_as = { name = clue_trait_2 value = flag:callous_or_ambitious } } # Deceitful or craven. 125 = { trigger = { OR = { has_trait = deceitful has_trait = craven } NOT = { scope:clue_trait_1 = flag:deceitful_or_craven } } save_scope_value_as = { name = clue_trait_2 value = flag:deceitful_or_craven } } # Brave or trusting. 125 = { trigger = { OR = { has_trait = brave has_trait = trusting } NOT = { scope:clue_trait_1 = flag:brave_or_trusting } } save_scope_value_as = { name = clue_trait_2 value = flag:brave_or_trusting } } # Paranoid or vengeful. 125 = { trigger = { OR = { has_trait = paranoid has_trait = vengeful } NOT = { scope:clue_trait_1 = flag:paranoid_or_vengeful } } save_scope_value_as = { name = clue_trait_2 value = flag:paranoid_or_vengeful } } } } # Aaaaaaand make scope:culprit an actual witch. hidden_effect = { scope:culprit = { give_witch_secret_or_trait_effect = yes } } } # Scope:suspect_a, clearly. option = { name = fp1_yearly.0111.a # Display tooltip & apply effects. fp1_0111_select_accusation_effect = { CHARACTER = scope:suspect_a } stress_impact = { paranoid = major_stress_impact_loss zealous = major_stress_impact_loss trusting = major_stress_impact_gain cynical = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.5 ai_vengefulness = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = paranoid } modifier = { # Weight up for stress. add = 30 has_trait = zealous } modifier = { # Weight down for stress. add = -30 has_trait = trusting } modifier = { # Weight down for stress. add = -30 has_trait = cynical } } } # Scope:suspect_b, I think... option = { name = fp1_yearly.0111.b # Display tooltip & apply effects. fp1_0111_select_accusation_effect = { CHARACTER = scope:suspect_b } stress_impact = { paranoid = major_stress_impact_loss zealous = major_stress_impact_loss trusting = major_stress_impact_gain cynical = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.5 ai_vengefulness = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = paranoid } modifier = { # Weight up for stress. add = 30 has_trait = zealous } modifier = { # Weight down for stress. add = -30 has_trait = trusting } modifier = { # Weight down for stress. add = -30 has_trait = cynical } } } # Sounds like scope:suspect_c! option = { name = fp1_yearly.0111.c # Display tooltip & apply effects. fp1_0111_select_accusation_effect = { CHARACTER = scope:suspect_c } stress_impact = { paranoid = major_stress_impact_loss zealous = major_stress_impact_loss trusting = major_stress_impact_gain cynical = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.5 ai_vengefulness = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = paranoid } modifier = { # Weight up for stress. add = 30 has_trait = zealous } modifier = { # Weight down for stress. add = -30 has_trait = trusting } modifier = { # Weight down for stress. add = -30 has_trait = cynical } } } # Scope:accursed, it's all in your mind, alright? option = { name = fp1_yearly.0111.d trigger = { NOT = { has_trait = witch } } # Diplomacy challenge to convince scope:accursed that the nithing pole means nothing. duel = { skill = diplomacy target = scope:accursed # You talk them down. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0111.d.tt_success send_interface_toast = { title = fp1_yearly.0111.d.tt_success left_icon = scope:accursed # Gain a favour if possible. if = { limit = { can_add_hook = { type = favor_hook target = scope:accursed } } add_hook = { type = favor_hook target = scope:accursed years = 20 } } # And always a lot of opinion. reverse_add_opinion = { target = scope:accursed modifier = trust_opinion opinion = 50 } # Plus a decent chunk of prestige. add_prestige = medium_prestige_gain } } # They freak the hell out. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0111.d.tt_failure send_interface_toast = { title = fp1_yearly.0111.d.tt_failure left_icon = scope:accursed # Scope:accursed has a melt-down. scope:accursed = { fp1_0111_accursed_receives_curse_effect = yes } } } } stress_impact = { trusting = major_stress_impact_loss cynical = major_stress_impact_loss paranoid = major_stress_impact_gain zealous = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = -0.25 ai_zeal = -0.5 } modifier = { # Weight up for stress. add = 30 has_trait = trusting } modifier = { # Weight up for stress. add = 30 has_trait = cynical } modifier = { # Weight down for stress. add = -30 has_trait = paranoid } modifier = { # Weight down for stress. add = -30 has_trait = zealous } } } # (Witch) Worry not, I have a counter-spell. option = { name = fp1_yearly.0111.e trigger = { has_trait = witch } trait = witch # Gain a favour if possible. if = { limit = { can_add_hook = { type = favor_hook target = scope:accursed } } add_hook = { type = favor_hook target = scope:accursed years = 20 } } # And always a lot of opinion. reverse_add_opinion = { target = scope:accursed modifier = trust_opinion opinion = 50 } # Plus a decent chunk of prestige. add_prestige = medium_prestige_gain stress_impact = { trusting = major_stress_impact_loss cynical = major_stress_impact_loss paranoid = major_stress_impact_gain zealous = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = -0.25 ai_zeal = -0.5 } modifier = { # Weight up for stress. add = 30 has_trait = trusting } modifier = { # Weight up for stress. add = 30 has_trait = cynical } modifier = { # Weight down for stress. add = -30 has_trait = paranoid } modifier = { # Weight down for stress. add = -30 has_trait = zealous } } } } ################################################## # FLAVOUR YEARLIES ################################################## # FLAVOUR YEARLIES EFFECTS scripted_effect fp1_pick_outdoorsy_child_for_winter_effect = { random_child = { # Try to pick an outdoorsy child first. limit = { child_suitable_to_play_with_character_one_sided = { CHARACTER = root } OR = { childhood_loud_child_trigger = yes childhood_nice_child_trigger = yes } } # Otherwise, any is good. alternative_limit = { child_suitable_to_play_with_character_one_sided = { CHARACTER = root } } save_scope_as = child } } ################################################## # Out for a Sail # by Ewan Cowhig Croft # 0501 - 0510 ################################################## # You encounter a distressed raiding vessel whilst out sailing. fp1_yearly.0501 = { type = character_event title = fp1_yearly.0501.t desc = fp1_yearly.0501.desc theme = realm left_portrait = { character = root animation = shock } override_background = { reference = fp1_ocean_norse } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0501 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_coastal_norse_tribal = yes } weight_multiplier = { base = 1 # Weight up for having sea-faring traits. modifier = { add = 0.5 has_trait = viking } modifier = { add = 0.5 has_trait = adventurer } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0501 days = 1825 } # Generate a gender for the fisher people. random_dummy_gender_soldier_effect = { SCOPE_NAME = fisherpeople } } # Stop and try to help them! option = { name = fp1_yearly.0501.a # Martial duel to organise your sailors. duel = { skill = martial value = 10 # You succeed in saving the crew and some of their haul! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0501.a.tt_success send_interface_toast = { title = fp1_yearly.0501.a.tt_success left_icon = root add_prestige = medium_prestige_gain } } # You fail, and many are lost to the storm. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0501.a.tt_failure send_interface_toast = { title = fp1_yearly.0501.a.tt_failure left_icon = root add_prestige = miniscule_prestige_loss } } } stress_impact = { diligent = minor_stress_impact_loss compassionate = medium_stress_impact_loss lazy = minor_stress_impact_gain callous = medium_stress_impact_gain sadistic = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.75 ai_energy = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = diligent } modifier = { # Weight up for stress. add = 20 has_trait = compassionate } modifier = { # Weight down for stress. add = -10 has_trait = lazy } modifier = { # Weight down for stress. add = -20 has_trait = callous } modifier = { # Weight down for stress. add = -20 has_trait = sadistic } } } # Salvage the cargo, kill the survivors. option = { name = fp1_yearly.0501.b # Prowess duel to storm the boat. duel = { skill = prowess value = 10 # You storm the boat easily. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0501.b.tt_success send_interface_toast = { title = fp1_yearly.0501.b.tt_success left_icon = root add_gold = minor_gold_value } } # Survivors slip to shore. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0501.b.tt_failure send_interface_toast = { title = fp1_yearly.0501.b.tt_failure left_icon = root add_gold = minor_gold_value add_tyranny = minor_tyranny_gain } } } stress_impact = { greedy = minor_stress_impact_loss callous = minor_stress_impact_loss sadistic = medium_stress_impact_loss compassionate = medium_stress_impact_gain generous = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_greed = 0.25 ai_compassion = -0.5 ai_honor = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = greedy } modifier = { # Weight up for stress. add = 10 has_trait = callous } modifier = { # Weight up for stress. add = 20 has_trait = sadistic } modifier = { # Weight down for stress. add = -20 has_trait = compassionate } modifier = { # Weight down for stress. add = -20 has_trait = generous } } } # Sail on by. option = { name = fp1_yearly.0501.c # Minor dread gain from your crew. add_dread = miniscule_dread_gain stress_impact = { lazy = minor_stress_impact_loss callous = minor_stress_impact_loss arbitrary = minor_stress_impact_loss diligent = minor_stress_impact_gain compassionate = minor_stress_impact_gain just = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight up for stress. add = 10 has_trait = callous } modifier = { # Weight up for stress. add = 10 has_trait = arbitrary } modifier = { # Weight down for stress. add = -10 has_trait = diligent } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } modifier = { # Weight down for stress. add = -10 has_trait = just } } } } ################################################## # The Stench of Success # by Ewan Cowhig Croft # 0511 - 0520 ################################################## scripted_trigger fp1_keeps_stinking_hunting_trophy = { # Standard checks. is_available_ai_adult = yes # Do they have the right personality? calc_true_if = { amount >= 2 has_trait = greedy has_trait = lazy has_trait = wrathful has_trait = arrogant has_trait = brave has_trait = gregarious has_trait = ambitious has_trait = callous has_trait = sadistic has_trait = stubborn has_trait = vengeful } NOR = { has_trait = diligent has_trait = humble has_trait = shy has_trait = fickle } # Filter out anyone who'd be a better hunter than this. NOR = { has_trait = lifestyle_hunter has_court_position = master_of_hunt_court_position } # Finally, remove people who are currently hurt, so that berserkers can smash 'em up. NOT = { has_trait = wounded } } # One of your courtiers is extremely proud of a hunting trophy and won't let it go. fp1_yearly.0511 = { type = character_event title = fp1_yearly.0511.t desc = fp1_yearly.0511.desc theme = hunting left_portrait = { character = root animation = disgust } right_portrait = { character = scope:stinker animation = personality_honorable } override_background = { reference = study } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0511 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_norse_tribal = yes fp1_is_in_scandinavia_or_colonies = yes # Must have a suitable random courtier. any_courtier = { fp1_keeps_stinking_hunting_trophy = yes } } weight_multiplier = { base = 1 # Weight up a little for special traits. modifier = { add = 0.5 has_trait = lifestyle_hunter } modifier = { add = 0.5 has_trait = berserker } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0511 days = 1825 } # Designate a suitable courtier. random_courtier = { # Try to grab someone relevant. limit = { fp1_keeps_stinking_hunting_trophy = yes is_of_major_or_minor_interest_trigger = { CHARACTER = root } } # Otherwise, any valid character will do. alternative_limit = { fp1_keeps_stinking_hunting_trophy = yes } save_scope_as = stinker } # Pick a local animal for the head to be from. select_local_animal_effect = { TYPE = any } # Save scope to limit possible animals: any/big/small/dangerous/harmless/prowling # Give them the trophy. scope:stinker = { add_character_modifier = { modifier = fp1_0511_carries_stinking_trophy_modifier years = 5 } } } # It's very nice, scope:stinker. So very, very nice. option = { name = fp1_yearly.0511.a # Scope:stinker is very happy with you. reverse_add_opinion = { target = scope:stinker modifier = pleased_opinion opinion = 75 } # Everyone else is not. every_courtier_or_guest = { custom = custom.every_courtier_and_guest limit = { this != scope:stinker } add_opinion = { target = root modifier = angry_opinion opinion = -20 } } stress_impact = { deceitful = minor_stress_impact_loss patient = minor_stress_impact_loss shy = medium_stress_impact_loss impatient = minor_stress_impact_gain honest = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.25 ai_sociability = -0.25 ai_boldness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = deceitful } modifier = { # Weight up for stress. add = 10 has_trait = patient } modifier = { # Weight up for stress. add = 20 has_trait = shy } modifier = { # Weight down for stress. add = -10 has_trait = impatient } modifier = { # Weight down for stress. add = -20 has_trait = honest } } } # [HighGod], [HealthGod], and [FortuneGod] too, get *rid* of it! option = { name = fp1_yearly.0511.b # Scope:stinker is incredibly upset. reverse_add_opinion = { target = scope:stinker modifier = cruelty_opinion opinion = -50 } scope:stinker = { remove_character_modifier = fp1_0511_carries_stinking_trophy_modifier } # Everyone else is not. every_courtier_or_guest = { custom = custom.every_courtier_and_guest limit = { this != scope:stinker } add_opinion = { target = root modifier = grateful_opinion opinion = 20 } } stress_impact = { wrathful = minor_stress_impact_loss impatient = medium_stress_impact_loss compassionate = minor_stress_impact_gain patient = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.25 ai_sociability = 0.25 ai_compassion = -0.25 } modifier = { # Weight up for stress. add = 10 has_trait = wrathful } modifier = { # Weight up for stress. add = 20 has_trait = impatient } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } modifier = { # Weight down for stress. add = -20 has_trait = patient } } } # (Berserker) root SMASH! option = { name = fp1_yearly.0511.c trigger = { has_trait = berserker } trait = berserker # Scope:stinker is incredibly upset. reverse_add_opinion = { target = scope:stinker modifier = cruelty_opinion opinion = -75 } scope:stinker = { remove_character_modifier = fp1_0511_carries_stinking_trophy_modifier } # Scope:stinker will remember this. progress_towards_rival_effect = { REASON = rival_berserker_smash CHARACTER = scope:stinker OPINION = 0 } # But man, wasn't that *therapeutic*? ## Stress loss handled in stress_impact. stress_impact = { berserker = massive_stress_loss impatient = minor_stress_impact_loss wrathful = minor_stress_impact_loss patient = medium_stress_impact_gain calm = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_boldness = 0.5 ai_compassion = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = impatient } modifier = { # Weight up for stress. add = 10 has_trait = wrathful } modifier = { # Weight down for stress. add = -20 has_trait = patient } modifier = { # Weight down for stress. add = -20 has_trait = calm } } } # (Hunter) How about we get you a *new* trophy this eve? option = { name = fp1_yearly.0511.d # Elite hunters who don't fly off the handle. trigger = { has_trait = lifestyle_hunter NOT = { has_trait = berserker } } trait = lifestyle_hunter # Scope:stinker benefits. scope:stinker = { # They're happy with you. add_opinion = { target = root modifier = pleased_opinion opinion = 50 } # And won't make the same mistake. add_trait = lifestyle_hunter # Plus they ditch the old trophy. remove_character_modifier = fp1_0511_carries_stinking_trophy_modifier } # Best friends? progress_towards_friend_effect = { CHARACTER = scope:stinker OPINION = 0 REASON = friend_fp1_stink_new_trophy } # Everyone else is just glad the stink is gone. every_courtier_or_guest = { custom = custom.every_courtier_and_guest limit = { this != scope:stinker } add_opinion = { target = root modifier = grateful_opinion opinion = 10 } } stress_impact = { compassionate = minor_stress_impact_loss gregarious = minor_stress_impact_loss patient = medium_stress_impact_loss impatient = medium_stress_impact_gain lazy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_energy = 0.5 ai_honor = 0.25 ai_sociability = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = compassionate } modifier = { # Weight up for stress. add = 10 has_trait = gregarious } modifier = { # Weight up for stress. add = 20 has_trait = patient } modifier = { # Weight down for stress. add = -20 has_trait = impatient } modifier = { # Weight down for stress. add = -20 has_trait = lazy } } } # Yes, scope:stinker, it's rank, now please leave. option = { name = fp1_yearly.0511.e # Scope:stinker is quite upset. reverse_add_opinion = { target = scope:stinker modifier = cruelty_opinion opinion = -25 } # But people respect you telling it like it is. add_prestige = minor_prestige_gain stress_impact = { honest = medium_stress_impact_loss deceitful = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.25 ai_sociability = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 20 has_trait = honest } modifier = { # Weight down for stress. add = -20 has_trait = deceitful } } } after = { remove_variable = animal_type } } ################################################## # Blood on the Snow # by Ewan Cowhig Croft # 0521 - 0530 ################################################## # Your child challenges your mastery of snowball warfare. fp1_yearly.0521 = { type = character_event title = fp1_yearly.0521.t desc = fp1_yearly.0521.desc theme = war left_portrait = { character = root animation = fear } right_portrait = { character = scope:child animation = personality_bold } override_background = { reference = market } widget = { gui = "event_window_widget_vfx_snow" container = "foreground_shader_vfx_container" } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0521 } is_playable_character = yes # Must have at least one suitable child. any_child = { child_suitable_to_play_with_character_one_sided = { CHARACTER = root } } # Gotta have snow in the capital. character_capital_has_winter_trigger = yes } weight_multiplier = { base = 1 # Weight up for outdoorsy kids. modifier = { add = 1 any_child = { childhood_loud_child_trigger = yes } } modifier = { add = 1 any_child = { childhood_nice_child_trigger = yes } } # Weight according to winter scale. character_capital_has_snow_suitable_for_activities = { CHARACTER = root } } immediate = { play_music_cue = "mx_cue_war_declared" add_character_flag = { flag = had_event_fp1_yearly_0521 days = 1825 } # Designate a suitable child. fp1_pick_outdoorsy_child_for_winter_effect = yes } # Good shot! Come here y'little rascal! option = { name = fp1_yearly.0521.a # You get into a friendly snowball fight. custom_tooltip = fp1_yearly.0521.a.tt # Gain some opinion with them. reverse_add_opinion = { target = scope:child modifier = love_opinion opinion = 20 } stress_impact = { gregarious = minor_stress_impact_loss forgiving = minor_stress_impact_loss vengeful = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.5 ai_energy = 0.25 ai_vengefulness = -0.25 } modifier = { # Weight up for stress. add = 10 has_trait = gregarious } modifier = { # Weight up for stress. add = 10 has_trait = forgiving } modifier = { # Weight down for stress. add = -10 has_trait = vengeful } } } # Throw a match against them. option = { name = fp1_yearly.0521.b # You take a dive. custom_tooltip = fp1_yearly.0521.b.tt # Gain more opinion. reverse_add_opinion = { target = scope:child modifier = love_opinion opinion = 40 } # But lose a little prestige. add_prestige = minor_prestige_loss stress_impact = { forgiving = minor_stress_impact_loss humble = minor_stress_impact_loss vengeful = minor_stress_impact_gain arrogant = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_sociability = 0.25 ai_honor = -0.1 ai_vengefulness = -0.25 } modifier = { # Weight up for stress. add = 10 has_trait = forgiving } modifier = { # Weight up for stress. add = 10 has_trait = humble } modifier = { # Weight down for stress. add = -10 has_trait = vengeful } modifier = { # Weight down for stress. add = -10 has_trait = arrogant } } } # Beat them into the ground with superior martial know-how. option = { name = fp1_yearly.0521.c # If you've got berserker, you flip out when taking things too seriously instead. trigger = { NOR = { has_trait = berserker has_trait = strategist } } # Confirm to the player. custom_tooltip = fp1_yearly.0521.c.tt # Sure would be embarrassing if you lost this snowball fight your voluntarily taking too seriously, amirite? duel = { skill = martial target = scope:child # You successfully beat the child. 40 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0521.c.tt_success send_interface_toast = { title = fp1_yearly.0521.c.tt_success left_icon = scope:child # Minor prestige for uhh... your ruthlessness? add_prestige = minor_prestige_gain # Scope:child is a bit upset. reverse_add_opinion = { target = scope:child modifier = disappointed_opinion opinion = -30 } } } # Scope:child trounces you. 60 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0521.c.tt_failure send_interface_toast = { title = fp1_yearly.0521.c.tt_failure left_icon = scope:child # Clearly you're taking this *way* too seriously. reverse_add_opinion = { target = scope:child modifier = respect_opinion opinion = -40 } } } } stress_impact = { vengeful = medium_stress_impact_loss arrogant = medium_stress_impact_loss forgiving = medium_stress_impact_gain humble = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_sociability = 0.25 ai_honor = 0.1 ai_compassion = -0.75 } modifier = { # Weight up for stress. add = 20 has_trait = vengeful } modifier = { # Weight up for stress. add = 20 has_trait = arrogant } modifier = { # Weight down for stress. add = -20 has_trait = forgiving } modifier = { # Weight down for stress. add = -20 has_trait = humble } } } # (Strategist) Insta-beat 'em. option = { name = fp1_yearly.0521.d trigger = { has_trait = strategist NOT = { has_trait = berserker } } trait = strategist # Confirm to the player. custom_tooltip = fp1_yearly.0521.d.tt # Minor prestige for uhh... your ruthlessness? add_prestige = minor_prestige_gain # Scope:child is a bit awed. reverse_add_opinion = { target = scope:child modifier = respect_opinion opinion = 20 } stress_impact = { vengeful = medium_stress_impact_loss arrogant = medium_stress_impact_loss forgiving = medium_stress_impact_gain humble = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_sociability = 0.25 ai_honor = 0.1 ai_compassion = -0.75 } modifier = { # Weight up for stress. add = 20 has_trait = vengeful } modifier = { # Weight up for stress. add = 20 has_trait = arrogant } modifier = { # Weight down for stress. add = -20 has_trait = forgiving } modifier = { # Weight down for stress. add = -20 has_trait = humble } } } # (Berserker) RRRAAAAARRRGGGHHH! option = { name = fp1_yearly.0521.e trigger = { has_trait = berserker } trait = berserker # The snowball triggers your berserk rage. custom_tooltip = fp1_yearly.0521.e.tt # Berserkergang relieves stress. ## Stress loss handled in stress impact. # Scope:child is *terrified*. reverse_add_opinion = { target = scope:child modifier = scared_opinion opinion = -100 } stress_impact = { berserker = massive_stress_loss impatient = minor_stress_impact_loss wrathful = minor_stress_impact_loss patient = medium_stress_impact_gain calm = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.75 ai_compassion = -1 } modifier = { # Weight up for stress. add = 10 has_trait = impatient } modifier = { # Weight up for stress. add = 10 has_trait = wrathful } modifier = { # Weight down for stress. add = -20 has_trait = patient } modifier = { # Weight down for stress. add = -20 has_trait = calm } } } # Don't bother parent whilst they're working. Run along. option = { name = fp1_yearly.0521.f # Welp, that's that dealt with. add_stress = minor_stress_loss # Scope:child is mildly hurt. reverse_add_opinion = { target = scope:child modifier = hurt_opinion opinion = -10 } # Too gentle a response to give stress, to be honest. ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = -0.25 ai_energy = -0.5 ai_sociability = -0.75 } } } } ################################################## # [Dynasty] on Ice # by Ewan Cowhig Croft # 0531 - 0540 ################################################## scripted_trigger fp1_child_not_had_decisive_skating_lessons_trigger = { NOR = { has_character_flag = child_had_event_fp1_yearly_0531 has_character_modifier = fp1_avoiding_the_snow_modifier } } # Teaching your Child to Ice Skate fp1_yearly.0531 = { type = character_event title = fp1_yearly.0531.t desc = fp1_yearly.0531.desc theme = education left_portrait = { character = root animation = admiration } right_portrait = { character = scope:child animation = shame } override_background = { reference = courtyard } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0531 } is_playable_character = yes # Must be a suitable culture. culture_uses_frequent_winter_transportation_trigger = yes # Must have at least one suitable child. any_child = { child_suitable_to_play_with_character_one_sided = { CHARACTER = root } # Can't have successfully learnt/been encouraged away from already. fp1_child_not_had_decisive_skating_lessons_trigger = yes } # Gotta have snow in the capital. character_capital_has_winter_trigger = yes } weight_multiplier = { base = 1 # Weight up for outdoorsy kids. modifier = { add = 1 any_child = { childhood_loud_child_trigger = yes } } modifier = { add = 1 any_child = { childhood_nice_child_trigger = yes } } # Weight according to winter scale. character_capital_has_snow_suitable_for_activities = { CHARACTER = root } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0531 days = 1825 } # Pick a suitable child; this is a slightly modified fp1_pick_outdoorsy_child_for_winter, as we need to filter out a few things. random_child = { # Try to pick an outdoorsy child first. limit = { child_suitable_to_play_with_character_one_sided = { CHARACTER = root } OR = { has_trait = rowdy childhood_loud_child_trigger = yes childhood_nice_child_trigger = yes } # Can't have successfully learnt/been encouraged away from already. fp1_child_not_had_decisive_skating_lessons_trigger = yes } # Otherwise, any is good. alternative_limit = { child_suitable_to_play_with_character_one_sided = { CHARACTER = root } # Can't have successfully learnt/been encouraged away from already. fp1_child_not_had_decisive_skating_lessons_trigger = yes } save_scope_as = child } } # It's easy! Alright, you can watch me... option = { name = fp1_yearly.0531.a duel = { skill = diplomacy value = 10 # You successfully explain what's up to scope:child. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0531.a.tt_success send_interface_toast = { title = fp1_yearly.0531.a.tt_success left_icon = scope:child scope:child = { # Gain some opinion with them. add_opinion = { target = root modifier = love_opinion opinion = 20 } # And this boosts their confidence & balance. add_prowess_skill = medium_skill_bonus add_diplomacy_skill = medium_skill_bonus # Flag them as having learnt and not needing to learn again. add_character_flag = { flag = child_had_event_fp1_yearly_0531 years = 20 } } } } # You just frustrate them further. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0531.a.tt_failure send_interface_toast = { title = fp1_yearly.0531.a.tt_failure left_icon = scope:child # They grow frustrated. reverse_add_opinion = { target = scope:child modifier = respect_opinion opinion = -20 } scope:child = { add_stress = major_stress_gain } } } } stress_impact = { diligent = minor_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.5 ai_energy = 0.5 ai_compassion = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = diligent } modifier = { # Weight down for stress. add = -10 has_trait = lazy } } } # Don't we have maids for you to pester? option = { name = fp1_yearly.0531.b # You focus on your work. add_character_modifier = { modifier = fp1_focusing_on_rule_modifier years = 10 } # They grow frustrated. reverse_add_opinion = { target = scope:child modifier = hurt_opinion opinion = -40 } # And will remember this in later life. hidden_effect = { if = { limit = { can_set_relation_potential_rival_trigger = { CHARACTER = scope:child } } set_relation_potential_rival = scope:child } } stress_impact = { callous = minor_stress_impact_loss lazy = major_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = -0.25 ai_energy = -0.5 ai_sociability = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = callous } modifier = { # Weight up for stress. add = 30 has_trait = lazy } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } } } # Play indoors, you'll catch the cold. option = { name = fp1_yearly.0531.c # Your advice is taken. scope:child = { add_character_modifier = { modifier = fp1_avoiding_the_snow_modifier years = 10 } } # They're a tad bummed though. reverse_add_opinion = { target = scope:child modifier = disappointed_opinion opinion = -20 } stress_impact = { cynical = minor_stress_impact_loss paranoid = minor_stress_impact_loss } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.25 ai_boldness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = cynical } modifier = { # Weight down for stress. add = -10 has_trait = paranoid } } } } ################################################## # The Beast of [Capital] # by Ewan Cowhig Croft # 0541 - 0550 ################################################## scripted_trigger fp1_0541_valid_child_prankster_trigger = { # Is available for events. is_available_ai_child = yes # Child is in the correct age bracket. child_not_infant_trigger = yes child_not_teen_trigger = yes # Must not be a quiet child. childhood_quiet_child_trigger = no } scripted_trigger fp1_0541_valid_courtier_victim_trigger = { # Is available for events. is_available_ai_adult = yes # Isn't especially brave or good at dealing with kids. NOR = { has_trait = calm has_trait = patient has_trait = humble has_trait = brave has_trait = shy has_trait = gregarious has_trait = trusting has_trait = compassionate has_trait = forgiving } # And, in case you act disproportionately, they aren't a good relationship. has_friendly_relationship_with_root_trigger = no } # Young child with animal furs is pretending to be a large animal. fp1_yearly.0541 = { type = character_event title = fp1_yearly.0541.t desc = fp1_yearly.0541.desc theme = family left_portrait = { character = scope:courtier animation = rage } right_portrait = { character = scope:child animation = schadenfreude } override_background = { reference = corridor_day } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0541 } is_landed = yes # Intended for Norse-ish tribals. fp1_is_norse_tribal = yes fp1_is_in_scandinavia_or_colonies = yes # Has a valid child. any_child = { fp1_0541_valid_child_prankster_trigger = yes } # Has a valid courtier. any_courtier = { fp1_0541_valid_courtier_victim_trigger = yes } } weight_multiplier = { base = 1 # Weight up for active/mean kids. modifier = { add = 1 any_child = { childhood_loud_child_trigger = yes } } modifier = { add = 1 any_child = { childhood_mean_child_trigger = yes } } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0541 days = 1825 } # Pick an appropriate child. random_child = { # Prefer rowdy or mean-spirited children. limit = { fp1_0541_valid_child_prankster_trigger = yes OR = { childhood_loud_child_trigger = yes childhood_mean_child_trigger = yes } } # Though otherwise any valid child is acceptable. alternative_limit = { fp1_0541_valid_child_prankster_trigger = yes } save_scope_as = child } # And an appropriate courtier. random_courtier = { limit = { fp1_0541_valid_courtier_victim_trigger = yes is_of_major_or_minor_interest_trigger = { CHARACTER = root } } alternative_limit = { fp1_0541_valid_courtier_victim_trigger = yes } save_scope_as = courtier } select_local_animal_effect = { TYPE = dangerous } # Save scope to limit possible animals: any/big/small/dangerous/harmless/prowling } # This is honestly just bloody hilarious. option = { name = fp1_yearly.0541.a # Scope:child is pretty damned happy. reverse_add_opinion = { target = scope:child modifier = amused_opinion opinion = 40 } # Scope:courtier loses opinion, though. reverse_add_opinion = { target = scope:courtier modifier = respect_opinion opinion = -50 } # Other courtiers are sceptical. every_courtier_or_guest = { custom = custom.every_courtier_and_guest limit = { NOR = { this = scope:child this = scope:courtier } } add_opinion = { target = root modifier = amused_opinion opinion = -10 } } stress_impact = { gregarious = minor_stress_impact_loss vengeful = minor_stress_impact_loss arbitrary = minor_stress_impact_loss just = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.25 ai_vengefulness = 0.25 ai_sociability = 0.25 ai_compassion = -0.25 } modifier = { # Weight up for stress. add = 10 has_trait = gregarious } modifier = { # Weight up for stress. add = 10 has_trait = vengeful } modifier = { # Weight up for stress. add = 10 has_trait = arbitrary } modifier = { # Weight down for stress. add = -10 has_trait = just } } } # Punish scope:child. option = { name = fp1_yearly.0541.b # Scope:courtier is happy, and you gain a favour hook if possible. if = { limit = { can_add_hook = { type = favor_hook target = scope:courtier } } add_hook = { type = favor_hook target = scope:courtier years = 5 } } reverse_add_opinion = { target = scope:courtier modifier = pleased_opinion opinion = 20 } # Scope:child is upset. reverse_add_opinion = { target = scope:child modifier = hurt_opinion opinion = -30 } stress_impact = { just = minor_stress_impact_loss forgiving = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.25 ai_honor = 0.25 ai_vengefulness = -0.25 } modifier = { # Weight up for stress. add = 10 has_trait = just } modifier = { # Weight down for stress. add = -10 has_trait = forgiving } } } # Evict scope:courtier. option = { name = fp1_yearly.0541.c # Scope:child is very happy. reverse_add_opinion = { target = scope:child modifier = amused_opinion opinion = 30 } # Scope:courtier is gobsmacked, might become a rival, and leaves. reverse_add_opinion = { target = scope:courtier modifier = respect_opinion opinion = -30 } scope:child = { save_scope_as = relationship_reason_involved_character } progress_towards_rival_effect = { REASON = rival_harassed_exiled CHARACTER = scope:courtier OPINION = 0 } clear_saved_scope = relationship_reason_involved_character scope:courtier = { select_and_move_to_pool_effect = yes } stress_impact = { arbitrary = major_stress_impact_loss just = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_compassion = -0.5 ai_rationality = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = arbitrary } modifier = { # Weight down for stress. add = -10 has_trait = just } } } # I really, profoundly do not care. option = { name = fp1_yearly.0541.d # Gain a little prestige for telling them to sod off. add_prestige = minor_prestige_gain # Both scope:child & scope:courtier are a tad upset. reverse_add_opinion = { target = scope:courtier modifier = disappointed_opinion opinion = -10 } reverse_add_opinion = { target = scope:child modifier = disappointed_opinion opinion = -10 } stress_impact = { arbitrary = minor_stress_impact_loss lazy = medium_stress_impact_loss just = medium_stress_impact_gain diligent = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = -0.5 ai_sociability = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = arbitrary } modifier = { # Weight up for stress. add = 20 has_trait = lazy } modifier = { # Weight down for stress. add = -20 has_trait = just } modifier = { # Weight down for stress. add = -20 has_trait = diligent } } } } ################################################## # Fishy Business # by Ewan Cowhig Croft # 0551 - 0560 ################################################## scripted_trigger fp1_0551_appropriately_smelly_courtier_trigger = { # Standard checks. is_available_ai_adult = yes # Must have some quality that's inspired this odd attitude. OR = { # Enjoys eating oddities. has_trait = lifestyle_hunter has_trait = gluttonous has_trait = vengeful # Weird health foods. has_trait = whole_of_body has_trait = lifestyle_mystic has_trait = lifestyle_physician # Refuses to admit wrong-doing. has_trait = arrogant has_trait = stubborn has_trait = sadistic } # And nothing that would rule it out. NOR = { has_trait = temperate has_trait = fickle has_trait = compassionate } } # One of your courtiers has taken a liking to foul food stuffs. fp1_yearly.0551 = { type = character_event title = fp1_yearly.0551.t desc = fp1_yearly.0551.desc theme = unfriendly left_portrait = { character = root animation = disapproval } right_portrait = { character = scope:antisocialite animation = personality_greedy } override_background = { reference = feast } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0551 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_norse_tribal = yes fp1_is_in_scandinavia = yes # Has a suitable courtier. any_courtier = { fp1_0551_appropriately_smelly_courtier_trigger = yes } } weight_multiplier = { base = 1 } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0551 days = 1825 } # Grab an appropriate courtier. random_courtier = { limit = { fp1_0551_appropriately_smelly_courtier_trigger = yes is_of_major_or_minor_interest_trigger = { CHARACTER = root } } alternative_limit = { fp1_0551_appropriately_smelly_courtier_trigger = yes } save_scope_as = antisocialite } } # Let's have a chat. option = { name = fp1_yearly.0551.a # See if you can politely convince scope:antisocialite to be a bit more respectful. duel = { skill = diplomacy target = scope:antisocialite # You put your point across eloquently. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -45 } desc = fp1_yearly.0551.a.tt_success send_interface_toast = { title = fp1_yearly.0551.a.tt_success left_icon = scope:antisocialite reverse_add_opinion = { target = scope:antisocialite modifier = respect_opinion opinion = 20 } every_courtier_or_guest = { custom = custom.every_courtier_and_guest limit = { this != scope:antisocialite } add_opinion = { target = root modifier = grateful_opinion opinion = 20 } } # And a bit of prestige to sweeten the pot. add_prestige = minor_prestige_gain } } # Scope:socialite is incredibly insulted. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -45 } desc = fp1_yearly.0551.a.tt_failure send_interface_toast = { title = fp1_yearly.0551.a.tt_failure left_icon = scope:antisocialite reverse_add_opinion = { target = scope:antisocialite modifier = insult_opinion opinion = -40 } progress_towards_rival_effect = { REASON = rival_smells_of_fish CHARACTER = scope:antisocialite OPINION = 0 } } } } stress_impact = { gregarious = minor_stress_impact_loss honest = minor_stress_impact_loss shy = minor_stress_impact_gain lazy = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.5 ai_compassion = 0.25 ai_rationality = 0.25 ai_vengefulness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = gregarious } modifier = { # Weight up for stress. add = 10 has_trait = honest } modifier = { # Weight down for stress. add = -10 has_trait = shy } modifier = { # Weight down for stress. add = -10 has_trait = lazy } } } # Perhaps I could simply move my quarters further away? option = { name = fp1_yearly.0551.b trigger = { NOT = { has_trait = gluttonous } } # Make it clear that scope:antisocialite will continue their smelly rampage. custom_tooltip = fp1_yearly.0551.b.tt # Gain a weak hook on the courtier. if = { limit = { can_add_hook = { target = scope:antisocialite type = favor_hook years = 5 } } add_hook = { target = scope:antisocialite type = favor_hook years = 5 } } # And some opinion. reverse_add_opinion = { target = scope:antisocialite modifier = grateful_opinion opinion = 30 } # Lose a bit of respect with everyone else. every_courtier_or_guest = { custom = custom.every_courtier_and_guest # Speedily filter out the root cause. limit = { this != scope:antisocialite } add_opinion = { target = root modifier = respect_opinion opinion = -20 } } stress_impact = { arbitrary = medium_stress_impact_loss shy = major_stress_impact_loss honest = minor_stress_impact_gain gregarious = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = -0.5 ai_rationality = -0.5 ai_sociability = -0.75 } modifier = { # Weight up for stress. add = 20 has_trait = arbitrary } modifier = { # Weight up for stress. add = 30 has_trait = shy } modifier = { # Weight down for stress. add = -10 has_trait = honest } modifier = { # Weight down for stress. add = -30 has_trait = gregarious } } } # (Gluttonous) Do... do you have any more of that? option = { name = fp1_yearly.0551.b_alt trigger = { has_trait = gluttonous } trait = gluttonous # Make it clear that scope:antisocialite will continue their smelly rampage. custom_tooltip = fp1_yearly.0551.b_alt.tt # Gain a strong hook on the courtier. if = { limit = { can_add_hook = { target = scope:antisocialite type = loyalty_hook } } add_hook = { target = scope:antisocialite type = loyalty_hook } } # Become friends, if possible. if = { limit = { can_set_relation_friend_trigger = { CHARACTER = scope:antisocialite } } set_relation_friend = { reason = friend_delectable_herring target = scope:antisocialite } } # And some opinion. reverse_add_opinion = { target = scope:antisocialite modifier = respect_opinion opinion = 50 } # Lose a *fair* of respect with everyone else. every_courtier_or_guest = { custom = custom.every_courtier_and_guest # Speedily filter out the root cause. limit = { this != scope:antisocialite } add_opinion = { target = root modifier = respect_opinion opinion = -40 } } stress_impact = { arbitrary = medium_stress_impact_loss shy = major_stress_impact_loss honest = minor_stress_impact_gain gregarious = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = -0.5 ai_rationality = -0.5 ai_sociability = -0.75 } modifier = { # Weight up for stress. add = 20 has_trait = arbitrary } modifier = { # Weight up for stress. add = 30 has_trait = shy } modifier = { # Weight down for stress. add = -10 has_trait = honest } modifier = { # Weight down for stress. add = -30 has_trait = gregarious } } } # You know what? Dungeon. *Now*. option = { name = fp1_yearly.0551.c # No one objects to the imprisonment. rightfully_imprison_character_effect = { TARGET = scope:antisocialite IMPRISONER = root } hidden_effect = { scope:antisocialite = { change_prison_type = dungeon } } # Immediate gratitude from your courtiers et al. every_courtier_or_guest = { custom = custom.every_courtier_and_guest # Speedily filter out the root cause. limit = { this != scope:antisocialite } add_opinion = { target = root modifier = grateful_opinion opinion = 20 } } stress_impact = { arbitrary = minor_stress_impact_loss callous = minor_stress_impact_loss sadistic = minor_stress_impact_loss just = medium_stress_impact_gain compassionate = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_honor = -0.5 ai_compassion = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = arbitrary } modifier = { # Weight up for stress. add = 10 has_trait = callous } modifier = { # Weight up for stress. add = 10 has_trait = sadistic } modifier = { # Weight down for stress. add = -20 has_trait = just } modifier = { # Weight down for stress. add = -20 has_trait = compassionate } } } # What a shame, it seems my attention is required *far* away. option = { name = fp1_yearly.0551.d # What a relief. ## Stress loss handled in stress_impact. # Lose a bit of respect with everyone else. every_courtier_or_guest = { custom = custom.every_courtier_and_guest # Speedily filter out the root cause. limit = { this != scope:antisocialite } add_opinion = { target = root modifier = respect_opinion opinion = -10 } } # Gain a mild modifier. add_character_modifier = { modifier = fp1_yearly_0551_absent_lord_modifier years = 5 } stress_impact = { base = major_stress_loss shy = minor_stress_impact_loss gregarious = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 0.5 ai_sociability = -0.25 ai_boldness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = shy } modifier = { # Weight down for stress. add = -10 has_trait = gregarious } } } } ################################################## # My Arm Against Yours # by Ewan Cowhig Croft # 0561 - 0570 ################################################## scripted_trigger fp1_0561_is_friendly_knight_trigger = { # Standard checks. is_available_ai_adult = yes is_landed = no # Has some sociable qualities. OR = { ai_sociability >= low_positive_ai_value ai_boldness >= low_positive_ai_value ai_energy >= low_positive_ai_value ai_honor >= low_positive_ai_value has_trait = wrathful has_trait = arrogant has_trait = brave has_trait = gregarious has_trait = ambitious has_trait = lifestyle_reveler } # No special relationship with root. has_any_good_relationship_with_root_trigger = no has_any_bad_relationship_with_root_trigger = no # Doesn't absolutely hate root. opinion = { target = root value >= low_negative_opinion } } # One of your knights challenges you to a friendly arm wrestle. fp1_yearly.0561 = { type = character_event title = fp1_yearly.0561.t desc = fp1_yearly.0561.desc theme = friendly left_portrait = { character = root animation = personality_bold } right_portrait = { character = scope:knight animation = admiration } override_background = { reference = tavern } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_at_peace_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0561 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_norse_tribal = yes # Has an appropriate available knight. any_knight = { fp1_0561_is_friendly_knight_trigger = yes } # Must be a suitable challengee. prowess >= mediocre_skill_rating is_healthy = yes can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } } weight_multiplier = { base = 1 # Weight down/up a little according to prowess. modifier = { add = -0.25 prowess <= low_skill_rating } modifier = { add = -0.25 prowess <= mediocre_skill_rating } modifier = { add = 0.25 prowess >= high_skill_rating } modifier = { add = 0.25 prowess >= very_high_skill_rating } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0561 days = 1825 } # Grab an appropriate knight to wrassle. random_knight = { limit = { fp1_0561_is_friendly_knight_trigger = yes is_of_major_or_minor_interest_trigger = { CHARACTER = root } } alternative_limit = { fp1_0561_is_friendly_knight_trigger = yes } # We want to weight up higher prowess knights, but not that dramatically. weight = { base = 0 modifier = { add = { value = prowess multiply = 0.5 } } } save_scope_as = knight } } # Accept the challenge. option = { name = fp1_yearly.0561.a trigger = { NOR = { has_trait = strong has_trait = physique_good } } # Basic prowess challenge. duel = { skill = prowess target = scope:knight # You win: some minor prestige, more opinion. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0561.a.tt_success send_interface_toast = { title = fp1_yearly.0561.a.tt_success left_icon = scope:knight add_prestige = minor_prestige_gain reverse_add_opinion = { target = scope:knight modifier = impressed_opinion opinion = 30 } } } # You lose: well, not a huge deal, and still good fun. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0561.a.tt_failure send_interface_toast = { title = fp1_yearly.0561.a.tt_failure left_icon = scope:knight add_prestige = miniscule_prestige_loss reverse_add_opinion = { target = scope:knight modifier = amused_opinion opinion = 10 } } } } # Either way you step friendship. progress_towards_friend_effect = { CHARACTER = scope:knight OPINION = 0 REASON = friend_arm_wrestled } stress_impact = { gregarious = minor_stress_impact_loss arrogant = minor_stress_impact_loss shy = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_energy = 0.5 ai_honor = 0.5 } modifier = { # Weight up for stress. add = 10 has_trait = gregarious } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight down for stress. add = -10 has_trait = shy } } } # (Strong/Physique_Good) *cracks knuckles* option = { name = fp1_yearly.0561.b trigger = { OR = { has_trait = strong has_trait = physique_good } } trait = strong trait = physique_good_1 trait = physique_good_2 trait = physique_good_3 # Effortless victory grants prestige & opinion. custom_tooltip = fp1_yearly.0561.b.tt add_prestige = medium_prestige_gain reverse_add_opinion = { target = scope:knight modifier = impressed_opinion opinion = 30 } stress_impact = { gregarious = minor_stress_impact_loss arrogant = minor_stress_impact_loss shy = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_energy = 0.5 ai_honor = 0.5 } modifier = { # Weight up for stress. add = 10 has_trait = gregarious } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight down for stress. add = -10 has_trait = shy } } } # Attempt to cheat. option = { name = fp1_yearly.0561.c # Modest intrigue challenge. duel = { skill = intrigue target = scope:knight # You win, making it look *dramatic*! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0561.c.tt_success send_interface_toast = { title = fp1_yearly.0561.c.tt_success left_icon = scope:knight # Gain prestige for your win! add_prestige = medium_prestige_gain # But your foe might know something... reverse_add_opinion = { target = scope:knight modifier = suspicion_opinion opinion = -5 } } } # Your cheating is discovered... 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0561.c.tt_failure send_interface_toast = { title = fp1_yearly.0561.c.tt_failure left_icon = scope:knight # This is embarrassing. add_prestige = minor_prestige_loss # Welp, scope:knight is pissed. reverse_add_opinion = { target = scope:knight modifier = weak_opinion opinion = -40 } progress_towards_rival_effect = { REASON = rival_cheated_at_armwrestle CHARACTER = scope:knight OPINION = 0 } } } } stress_impact = { deceitful = medium_stress_impact_loss honest = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_energy = 0.5 ai_honor = -0.5 } modifier = { # Weight up for stress. add = 20 has_trait = deceitful } modifier = { # Weight down for stress. add = -20 has_trait = honest } } } # Ignore scope:knight and continue eating. option = { name = fp1_yearly.0561.d # Gain minor prestige for just not bothering. add_prestige = miniscule_prestige_gain # Hurt the knight's feelings a little. reverse_add_opinion = { target = scope:knight modifier = hurt_opinion opinion = -10 } stress_impact = { arrogant = minor_stress_impact_loss gluttonous = minor_stress_impact_loss shy = medium_stress_impact_loss lazy = medium_stress_impact_loss humble = minor_stress_impact_gain gregarious = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = -0.5 ai_sociability = -0.75 } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight up for stress. add = 10 has_trait = gluttonous } modifier = { # Weight up for stress. add = 20 has_trait = shy } modifier = { # Weight up for stress. add = 20 has_trait = lazy } modifier = { # Weight down for stress. add = -10 has_trait = humble } modifier = { # Weight down for stress. add = -20 has_trait = gregarious } } } } ################################################## # Petty Vandalism # by Ewan Cowhig Croft # 0571 - 0580 ################################################## scripted_trigger fp1_0571_suitable_vandal_child_available_trigger = { # Is available for events. is_available_ai_child = yes # Child is old enough to have travelled that far. age >= 10 # Must not be a quiet child. childhood_quiet_child_trigger = no } scripted_trigger fp1_0571_suitable_annoyed_courtier_trigger = { # Is available for events. is_available_ai_adult = yes # Likely to be annoyed at the vandalism. NOR = { has_trait = calm has_trait = patient has_trait = shy has_trait = craven has_trait = arbitrary has_trait = fickle has_trait = lazy has_trait = trusting } } scripted_trigger fp1_0571_suitable_vandal_site_trigger = { tier = tier_county fp1_county_has_stele_trigger = yes squared_distance = { target = root.capital_county value <= squared_distance_small } } # A runestone in your lands has been damaged by one of your children. fp1_yearly.0571 = { type = character_event title = fp1_yearly.0571.t desc = fp1_yearly.0571.desc theme = family left_portrait = { character = scope:courtier animation = disapproval } right_portrait = { character = scope:child animation = shame } override_background = { reference = fp1_runestone } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0571 } is_landed_or_landless_administrative = yes # Filter to flavour-appropriate characters. fp1_is_norse = yes # Must have an appropriate runestone in your territory. any_held_title = { fp1_0571_suitable_vandal_site_trigger = yes } # A valid child. any_child = { fp1_0571_suitable_vandal_child_available_trigger = yes } # And a courtier who might not appreciate things. any_courtier = { fp1_0571_suitable_annoyed_courtier_trigger = yes } } weight_multiplier = { base = 1 # If you're setting a good example, kids are less likely to imitate. modifier = { add = 0.5 has_trait = just } # And the reverse. modifier = { add = -0.5 has_trait = arbitrary } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0571 days = 1825 } # Select a runestone location. random_held_title = { limit = { fp1_0571_suitable_vandal_site_trigger = yes } save_scope_as = vandal_site } # Grab a suitable child. random_child = { # Prefer rowdy or mean-spirited children. limit = { fp1_0541_valid_child_prankster_trigger = yes OR = { childhood_loud_child_trigger = yes childhood_mean_child_trigger = yes } } # Though otherwise any valid child is acceptable. alternative_limit = { fp1_0571_suitable_vandal_child_available_trigger = yes } save_scope_as = child } # And the courtier. random_courtier = { # Try to get someone who dislikes the child first. limit = { fp1_0571_suitable_annoyed_courtier_trigger = yes opinion = { target = scope:child value <= neutral_opinion } } # Otherwise, whoever is fine. alternative_limit = { fp1_0571_suitable_annoyed_courtier_trigger = yes } save_scope_as = courtier } # Quietly make the two potential rivals for later. hidden_effect = { if = { limit = { scope:child = { can_set_relation_potential_rival_trigger = { CHARACTER = scope:courtier } } } scope:child = { set_relation_potential_rival = scope:courtier } } } } # Look, you can't be defacing expensive monuments, 'kay? option = { name = fp1_yearly.0571.a # Diplomacy challenge to persuade the child. duel = { skill = diplomacy target = scope:child # Child sees how they've gone wrong. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0571.tt_success send_interface_toast = { title = fp1_yearly.0571.tt_success left_icon = scope:child # If the child's personality can accept it, make them honourable. scope:child = { if = { limit = { number_of_personality_traits < personality_trait_standard NOR = { has_trait = arbitrary has_trait = just } } add_trait = just } } # Otherwise, just give opinion. reverse_add_opinion = { target = scope:child modifier = respect_opinion opinion = 30 } } } # Child doesn't understand what the issue even is. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0571.tt_failure send_interface_toast = { title = fp1_yearly.0571.tt_failure left_icon = scope:child # If the child's personality can accept it, make them arbitrary. scope:child = { if = { limit = { number_of_personality_traits < personality_trait_standard NOT = { has_trait = just } } add_trait = arbitrary } } # Otherwise, just give opinion. reverse_add_opinion = { target = scope:child modifier = respect_opinion opinion = -20 } } } } # Courtier is satisfied that something has been done. reverse_add_opinion = { target = scope:courtier modifier = impressed_opinion opinion = 30 } # The runestone is destroyed. scope:vandal_site = { fp1_remove_stele_effect = yes } stress_impact = { trusting = medium_stress_impact_loss vengeful = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.25 ai_greed = -0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress. add = 20 has_trait = trusting } modifier = { # Weight down for stress. add = -20 has_trait = vengeful } } } # I'll be fining the cost of the runestone from your things. option = { name = fp1_yearly.0571.b # Gain opinion with the courtier. reverse_add_opinion = { target = scope:courtier modifier = pleased_opinion opinion = 30 } # The runestone is repaired. custom_tooltip = fp1_yearly.0571.b.tt # Lose opinion with the child, and fine them gold. scope:child = { add_opinion = { target = root modifier = respect_opinion opinion = -40 } remove_short_term_gold = root.raise_stele_gold_cost } stress_impact = { vengeful = minor_stress_impact_loss greedy = medium_stress_impact_loss forgiving = minor_stress_impact_gain generous = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_greed = 0.5 ai_vengefulness = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = vengeful } modifier = { # Weight up for stress. add = 20 has_trait = greedy } modifier = { # Weight down for stress. add = -10 has_trait = forgiving } modifier = { # Weight down for stress. add = -20 has_trait = generous } } } # Look, you can't be defacing expensive monuments, 'kay? option = { name = fp1_yearly.0571.b.2 # Gain lots of opinion with your child. reverse_add_opinion = { target = scope:child modifier = pleased_opinion opinion = 70 } # Lose some with your courtier. reverse_add_opinion = { target = scope:courtier modifier = respect_opinion opinion = -40 } # The runestone is repaired. custom_tooltip = fp1_yearly.0571.b.tt remove_short_term_gold = root.raise_stele_gold_cost # If your child is still growing, this may leave a mark. scope:child = { ## Making them more arbitrary. if = { limit = { # If they have room. number_of_personality_traits < personality_trait_standard # And don't already feel strongly either way. NOR = { has_trait = just has_trait = arbitrary } } add_trait = arbitrary } ## And less attached to money. if = { limit = { NOR = { has_trait = profligate has_trait = greedy } } add_trait = profligate } } stress_impact = { forgiving = minor_stress_impact_loss generous = minor_stress_impact_loss lazy = medium_stress_impact_loss arbitrary = medium_stress_impact_loss vengeful = minor_stress_impact_gain greedy = medium_stress_impact_gain diligent = medium_stress_impact_gain just = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_greed = -0.5 ai_honor = -0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = forgiving } modifier = { # Weight up for stress. add = 10 has_trait = generous } modifier = { # Weight up for stress. add = 20 has_trait = lazy } modifier = { # Weight up for stress. add = 20 has_trait = arbitrary } modifier = { # Weight down for stress. add = -10 has_trait = vengeful } modifier = { # Weight down for stress. add = -20 has_trait = greedy } modifier = { # Weight down for stress. add = -20 has_trait = diligent } modifier = { # Weight down for stress. add = -20 has_trait = just } } } # *Sigh* This isn't worth the bother. option = { name = fp1_yearly.0571.c # Gain lots of opinion with your child. reverse_add_opinion = { target = scope:child modifier = pleased_opinion opinion = 50 } # Lose some with your courtier. reverse_add_opinion = { target = scope:courtier modifier = respect_opinion opinion = -30 } # Lose the runestone. scope:vandal_site = { fp1_remove_stele_effect = yes } stress_impact = { forgiving = minor_stress_impact_loss lazy = medium_stress_impact_loss arbitrary = medium_stress_impact_loss vengeful = minor_stress_impact_gain diligent = medium_stress_impact_gain just = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = -0.5 ai_honor = -0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = forgiving } modifier = { # Weight up for stress. add = 20 has_trait = lazy } modifier = { # Weight up for stress. add = 20 has_trait = arbitrary } modifier = { # Weight down for stress. add = -10 has_trait = vengeful } modifier = { # Weight down for stress. add = -20 has_trait = diligent } modifier = { # Weight down for stress. add = -20 has_trait = just } } } } ################################################## # When I Grow Up # by Ewan Cowhig Croft # 0581 - 0590 ################################################## scripted_trigger fp1_0581_wrong_gender_child_wishes_to_fight_trigger = { NOT = { has_character_flag = fp1_dreams_of_shieldpersondom } trigger_if = { # Has the Royal Court and thus can modify pillars limit = { has_dlc_feature = diverge_culture } # For ease, they must share your faith or your culture. OR = { culture = root.culture faith = root.faith } } trigger_else = { # For ease, they must share your faith. faith = root.faith } # Have an appropriate matching personality. OR = { childhood_loud_child_trigger = yes childhood_mean_child_trigger = yes } # Be the wrong gender to fight. NOT = { can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } } # Aaaand be available to play. child_suitable_to_play_with_character_one_sided = { CHARACTER = root } } scripted_trigger fp1_0581_valid_courtier_to_bully_trigger = { # No positive relationship with root. has_any_good_relationship_with_root_trigger = no # And they have a negative opinion of you; player only action, so we only care about making sure the player might dislike this character. opinion = { target = root value <= medium_negative_opinion } } # Your wrong-gender child wants to fight and raid in a few years. fp1_yearly.0581 = { type = character_event title = fp1_yearly.0581.t desc = { desc = fp1_yearly.0581.desc.intro # Currently causes too much risk of scrolling copy. triggered_desc = { trigger = { always = no } desc = fp1_yearly.0581.desc.victim } desc = fp1_yearly.0581.desc.outro } theme = martial left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:child animation = admiration } lower_right_portrait = scope:victim override_background = { reference = corridor_day } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0581 } # Filter to shieldmaiden-having culture. culture = { has_cultural_parameter = has_access_to_shieldmaidens } trigger_if = { # Has the Royal Court and thus can modify pillars limit = { has_dlc_feature = diverge_culture } culture = { NOT = { has_cultural_parameter = martial_custom_equal_combatant } } } trigger_else = { # Can't be following an equal faith. faith = { NOT = { has_doctrine_parameter = combatant_can_be_either_gender_if_no_roco } } } # Any child of yours might want to be a shieldperson when they grow up. any_child = { fp1_0581_wrong_gender_child_wishes_to_fight_trigger = yes } } weight_multiplier = { base = 1 # Shieldmaidens are something of an inspiration, and thus modifier = { add = 1 has_trait = shieldmaiden } # If you're of low prowess, then there's less to aspire to. modifier = { add = -0.5 prowess <= medium_skill_rating } # But if you're of high prowess, then there's plenty. modifier = { add = 0.5 prowess >= very_high_skill_rating } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0581 days = 1825 } # Nab an appropriate child. random_child = { limit = { fp1_0581_wrong_gender_child_wishes_to_fight_trigger = yes } # Weight up the most promising fighter amongst your valid children. weight = { base = 0 modifier = { add = { value = prowess multiply = 100 } } } save_scope_as = child } # See if there's someone at court you can set the child to bully. if = { limit = { # Keep this player-specific for ease of presentation. is_ai = no any_courtier_or_guest = { fp1_0581_valid_courtier_to_bully_trigger = yes } } random_courtier_or_guest = { # Try to pick rivals et al first. limit = { has_any_bad_relationship_with_root_trigger = yes fp1_0581_valid_courtier_to_bully_trigger = yes } # Otherwise just any random dick will do. alternative_limit = { fp1_0581_valid_courtier_to_bully_trigger = yes } save_scope_as = victim } } } # My child, you shall make the world itself *tremble*. option = { name = fp1_yearly.0581.a trigger = { has_trait = shieldmaiden } trait = shieldmaiden # Scope:child is significantly more likely to try to become a shieldmaiden. custom_tooltip = fp1_yearly.0581.a.tt scope:child = { add_character_flag = fp1_dreams_of_shieldpersondom } # Scope:child gains prowess. scope:child = { add_prowess_skill = massive_skill_bonus } # Scope:child gains opinion. reverse_add_opinion = { target = scope:child modifier = love_opinion opinion = 60 } stress_impact = { shieldmaiden = major_stress_impact_loss brave = major_stress_impact_loss ambitious = major_stress_impact_loss compassionate = major_stress_impact_gain humble = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = 0.75 ai_zeal = 0.5 ai_energy = 0.25 } modifier = { # Weight down for stress. add = -30 has_trait = compassionate } modifier = { # Weight down for stress. add = -30 has_trait = humble } # Raiders & adventurers want their prodigy to follow in their footsteps. modifier = { add = 20 has_trait = viking } modifier = { add = 20 has_trait = adventurer } modifier = { add = 20 has_trait = brave } modifier = { add = 20 has_trait = shieldmaiden } modifier = { add = 20 has_trait = ambitious } } } # A noble goal! Have at thee, rogue! option = { name = fp1_yearly.0581.b trigger = { NOT = { has_trait = shieldmaiden } } # Scope:child is significantly more likely to try to become a shieldmaiden. custom_tooltip = fp1_yearly.0581.b.tt scope:child = { add_character_flag = fp1_dreams_of_shieldpersondom } # Scope:child gains prowess. scope:child = { add_prowess_skill = medium_skill_bonus } # Scope:child gains opinion. reverse_add_opinion = { target = scope:child modifier = love_opinion opinion = 30 } stress_impact = { compassionate = minor_stress_impact_loss gregarious = minor_stress_impact_loss } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_honor = 0.5 } modifier = { # Weight up for stress. add = 10 has_trait = compassionate } modifier = { # Weight up for stress. add = 10 has_trait = gregarious } # Raiders & adventurers want their prodigy to follow in their footsteps. modifier = { add = 20 has_trait = viking } modifier = { add = 20 has_trait = adventurer } modifier = { add = 20 has_trait = brave } modifier = { add = 20 has_trait = shieldmaiden } modifier = { add = 20 has_trait = ambitious } } } # Perhaps. You should practice by ambushing scope:victim. option = { name = fp1_yearly.0581.c trigger = { exists = scope:victim } # Scope:child gains prowess. scope:child = { add_prowess_skill = medium_skill_bonus } # Scope:victim gains wounded. scope:victim = { increase_wounds_no_death_effect = { REASON = duel } } # Scope:victim loses opinion of you. reverse_add_opinion = { target = scope:victim modifier = angry_opinion opinion = -20 } # Scope:child adds scope:victim as a potential rival. hidden_effect = { scope:child = { progress_towards_rival_effect = { REASON = rival_hit_with_stick CHARACTER = scope:victim OPINION = -30 } } } stress_impact = { vengeful = minor_stress_impact_loss sadistic = minor_stress_impact_loss forgiving = minor_stress_impact_gain compassionate = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_boldness = 0.25 ai_compassion = -0.25 ai_honor = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = vengeful } modifier = { # Weight up for stress. add = 10 has_trait = sadistic } modifier = { # Weight down for stress. add = -10 has_trait = forgiving } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } } } # Stop troubling me with foolish dreams. option = { name = fp1_yearly.0581.d # Gain a minor beneficial modifier for having your child avoid you. add_character_modifier = { modifier = fp1_ignoring_annoyances_modifier years = 10 } # Scope:child loses opinion of you. reverse_add_opinion = { target = scope:child modifier = disappointed_opinion opinion = -30 } stress_impact = { callous = minor_stress_impact_loss sadistic = minor_stress_impact_loss impatient = minor_stress_impact_loss compassionate = minor_stress_impact_gain patient = minor_stress_impact_gain shieldmaiden = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = -0.25 ai_compassion = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = callous } modifier = { # Weight up for stress. add = 10 has_trait = sadistic } modifier = { # Weight up for stress. add = 10 has_trait = impatient } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } modifier = { # Weight down for stress. add = -10 has_trait = patient } modifier = { # Weight down for stress. add = -50 has_trait = shieldmaiden } } } # Hah! We shall see, little one. option = { name = fp1_yearly.0581.e reverse_add_opinion = { target = scope:child modifier = pleased_opinion opinion = 15 } # Fairly mild option, so doesn't incur stress. ai_chance = { base = 100 ai_value_modifier = { ai_energy = -0.25 ai_boldness = -0.5 } } } } ################################################## # Raised Voices at the Thing # by Ewan Cowhig Croft # 0591 - 0600 ################################################## scripted_trigger fp1_0591_secondary_county_trigger = { holder = root culture = { has_innovation = innovation_all_things } } scripted_trigger fp1_0591_fighting_counties_at_thing_trigger = { tier = tier_county culture = { has_innovation = innovation_all_things } any_neighboring_county = { fp1_0591_secondary_county_trigger = yes } } # One of your counties is engaged in an argument with another. fp1_yearly.0591 = { type = character_event title = fp1_yearly.0591.t desc = { desc = fp1_yearly.0591.desc random_valid = { desc = fp1_yearly.0591.desc.border_dispute # desc = fp1_yearly.0591.desc.stolen_flocks # desc = fp1_yearly.0591.desc.kidnapped_child # desc = fp1_yearly.0591.desc.drunken_arson # desc = fp1_yearly.0591.desc.lost_dog # desc = fp1_yearly.0591.desc.disrupted_wedding desc = fp1_yearly.0591.desc.suspicious_will # desc = fp1_yearly.0591.desc.sheltered_criminal # desc = fp1_yearly.0591.desc.bad_luck # desc = fp1_yearly.0591.desc.fly_tipping # } } theme = realm left_portrait = { character = root animation = disgust } override_background = { reference = fp1_runestone_circle } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0591 } is_landed_or_landless_administrative = yes # Filter to flavour-appropriate characters. culture = { has_innovation = innovation_all_things } # Ensure you have at least two counties that can fight with each other. any_held_title = { fp1_0591_fighting_counties_at_thing_trigger = yes } } weight_multiplier = { base = 1 # Weight up a little for mainland Scandinavia. modifier = { add = 0.5 fp1_is_in_scandinavia = yes } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0591 days = 1825 } # Grab the counties. random_held_title = { limit = { fp1_0591_fighting_counties_at_thing_trigger = yes } save_scope_as = county_a random_neighboring_county = { limit = { fp1_0591_secondary_county_trigger = yes } save_scope_as = county_b } } # Set a dummy gender for loc. random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_gender } } # Side with scope:county_a. option = { name = fp1_yearly.0591.a # Levy bonus county modifier. scope:county_a = { add_county_modifier = { modifier = fp1_yearly_0591_levy_modifier years = 10 } } # And spurn the other county. scope:county_b = { add_county_modifier = { modifier = fp1_yearly_0591_spurned_modifier years = 10 } } stress_impact = { lazy = minor_stress_impact_loss diligent = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 0.5 ai_honor = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight down for stress. add = -10 has_trait = diligent } } } # Side with scope:county_b. option = { name = fp1_yearly.0591.b # Building cost county modifier. scope:county_b = { add_county_modifier = { modifier = fp1_yearly_0591_building_modifier years = 10 } } # And spurn the other county. scope:county_a = { add_county_modifier = { modifier = fp1_yearly_0591_spurned_modifier years = 10 } } stress_impact = { lazy = minor_stress_impact_loss diligent = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 0.5 ai_honor = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight down for stress. add = -10 has_trait = diligent } } } # Deliberately wind them both up. option = { name = fp1_yearly.0591.c # Popular opinion bonus modifiers in both (as they're too busy fighting each other). scope:county_a = { add_county_modifier = { modifier = fp1_yearly_0591_otherwise_occupied_modifier years = 10 } } scope:county_b = { add_county_modifier = { modifier = fp1_yearly_0591_otherwise_occupied_modifier years = 10 } } stress_impact = { deceitful = minor_stress_impact_loss arbitrary = medium_stress_impact_loss honest = minor_stress_impact_gain just = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 0.5 ai_vengefulness = 0.25 ai_honor = -0.25 } modifier = { # Weight up for stress. add = 10 has_trait = deceitful } modifier = { # Weight up for stress. add = 20 has_trait = arbitrary } modifier = { # Weight down for stress. add = -10 has_trait = honest } modifier = { # Weight down for stress. add = -20 has_trait = just } } } # Let them fight it out. option = { name = fp1_yearly.0591.d # Stress loss: not your problem, honestly. ## Covered in stress impact. stress_impact = { base = major_stress_loss lazy = medium_stress_impact_loss diligent = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = -0.25 ai_energy = -0.75 } modifier = { # Weight up for stress. add = 20 has_trait = lazy } modifier = { # Weight down for stress. add = -20 has_trait = diligent } } } } ################################################## # The Hardest Part of Ruling # by Ewan Cowhig Croft # 0601 - 0610 ################################################## scripted_trigger fp1_0601_valid_county_for_things_trigger = { tier = tier_county culture = { has_innovation = innovation_all_things } } # An incredibly boring local assembly tries your patience. fp1_yearly.0601 = { type = character_event title = fp1_yearly.0601.t desc = fp1_yearly.0601.desc theme = realm left_portrait = { character = root animation = boredom } override_background = { reference = fp1_runestone_circle } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0601 } is_landed = yes # Filter to flavour-appropriate characters. culture = { has_innovation = innovation_all_things } any_held_title = { fp1_0601_valid_county_for_things_trigger = yes } } weight_multiplier = { base = 1 # Weight up a little for mainland Scandinavia. modifier = { add = 0.5 fp1_is_in_scandinavia = yes } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0601 days = 1825 } # Designate a suitable random county. random_held_title = { limit = { fp1_0601_valid_county_for_things_trigger = yes } save_scope_as = county } # Set a dummy gender for loc. random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_gender } } # Fight to stay awake. option = { name = fp1_yearly.0601.a # Diplomacy duel to see how well you disguise it. duel = { skill = diplomacy value = decent_skill_rating # You power through and remain composed. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0601.a.tt_success send_interface_toast = { title = fp1_yearly.0601.a.tt_success left_icon = root add_prestige = medium_prestige_gain } } # You slump right out of your seat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0601.a.tt_failure send_interface_toast = { title = fp1_yearly.0601.a.tt_failure left_icon = root add_prestige = medium_prestige_loss } } } stress_impact = { just = minor_stress_impact_loss diligent = medium_stress_impact_loss arbitrary = minor_stress_impact_gain lazy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 1 ai_sociability = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = just } modifier = { # Weight up for stress. add = 20 has_trait = diligent } modifier = { # Weight down for stress. add = -10 has_trait = arbitrary } modifier = { # Weight down for stress. add = -20 has_trait = lazy } } } # (Diplomacy) Daydream of more interesting diplomatic problems. option = { name = fp1_yearly.0601.b trigger = { has_trait = education_diplomacy } trait = education_diplomacy_1 trait = education_diplomacy_2 trait = education_diplomacy_3 trait = education_diplomacy_4 trait = education_diplomacy_5 # Gain a minor modifier boosting diplomacy. add_character_modifier = { modifier = fp1_daydreaming_about_diplomacy_modifier years = 5 } stress_impact = { lazy = minor_stress_impact_loss arrogant = minor_stress_impact_loss diligent = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_sociability = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight down for stress. add = -10 has_trait = diligent } } } # (Martial) Daydream up new strategies. option = { name = fp1_yearly.0601.c trigger = { has_trait = education_martial } trait = education_martial_1 trait = education_martial_2 trait = education_martial_3 trait = education_martial_4 trait = education_martial_5 # Gain a minor modifier boosting martial. add_character_modifier = { modifier = fp1_daydreaming_about_martial_modifier years = 5 } stress_impact = { lazy = minor_stress_impact_loss arrogant = minor_stress_impact_loss diligent = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_sociability = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight down for stress. add = -10 has_trait = diligent } } } # (Stewardship) Daydream up new taxes to charge them. option = { name = fp1_yearly.0601.d trigger = { has_trait = education_stewardship } trait = education_stewardship_1 trait = education_stewardship_2 trait = education_stewardship_3 trait = education_stewardship_4 trait = education_stewardship_5 # Gain a minor modifier boosting stewardship. add_character_modifier = { modifier = fp1_daydreaming_about_stewardship_modifier years = 5 } stress_impact = { lazy = minor_stress_impact_loss arrogant = minor_stress_impact_loss diligent = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_sociability = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight down for stress. add = -10 has_trait = diligent } } } # (Intrigue) Daydream up new ways to keep them under control. option = { name = fp1_yearly.0601.e trigger = { has_trait = education_intrigue } trait = education_intrigue_1 trait = education_intrigue_2 trait = education_intrigue_3 trait = education_intrigue_4 trait = education_intrigue_5 # Gain a minor modifier boosting intrigue. add_character_modifier = { modifier = fp1_daydreaming_about_intrigue_modifier years = 5 } stress_impact = { lazy = minor_stress_impact_loss arrogant = minor_stress_impact_loss diligent = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_sociability = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight down for stress. add = -10 has_trait = diligent } } } # (Learning) Daydream of your favourite book. option = { name = fp1_yearly.0601.f trigger = { has_trait = education_learning } trait = education_learning_1 trait = education_learning_2 trait = education_learning_3 trait = education_learning_4 trait = education_learning_5 # Gain a minor modifier boosting learning. add_character_modifier = { modifier = fp1_daydreaming_about_learning_modifier years = 5 } stress_impact = { lazy = minor_stress_impact_loss arrogant = minor_stress_impact_loss diligent = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_sociability = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight down for stress. add = -10 has_trait = diligent } } } # Give in and doze off. option = { name = fp1_yearly.0601.g # Lose stress since... I mean, who cares? ## Stress loss handled in stress_impact. # Buuuuut also lose prestige. add_prestige = minor_prestige_loss # Low-random chance for players to occasionally become known as "the Snorer" here. hidden_effect = { if = { limit = { is_ai = no has_any_nickname = no } random = { chance = 1 send_interface_toast = { title = fp1_yearly.0601.g.nickname left_icon = root give_nickname = nick_the_snorer } } } } stress_impact = { base = major_stress_loss lazy = medium_stress_impact_loss diligent = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_honor = -0.25 ai_sociability = -0.5 ai_energy = -1 } modifier = { # Weight up for stress. add = 20 has_trait = lazy } modifier = { # Weight down for stress. add = -20 has_trait = diligent } } } } ################################################## # Leading by Example # by Ewan Cowhig Croft # 0611 - 0620 ################################################## scripted_trigger fp1_0611_aggressive_child_candidate_trigger = { # Age gate so that they're never the same as scope:child_b. age >= 10 # Must be around. child_suitable_to_play_with_character_one_sided = { CHARACTER = root } # And have the right personality for this. OR = { childhood_mean_child_trigger = yes childhood_loud_child_trigger = yes } } scripted_trigger fp1_0611_victim_child_candidate_trigger = { # Age gate so that they're never the same as scope:child_a. age < 10 # Must be around. child_suitable_to_play_with_character_one_sided = { CHARACTER = root } # We're not fussed about personality here, anything is good. } # One of your children wounds another whilst imitating you. fp1_yearly.0611 = { type = character_event title = fp1_yearly.0611.t desc = fp1_yearly.0611.desc theme = education left_portrait = { character = scope:child_a animation = shame } right_portrait = { character = scope:child_b animation = anger } override_background = { reference = bedchamber } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0611 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_norse_tribal = yes # You must qualify for imitation in some way. OR = { has_trait = viking has_trait = berserker has_trait = adventurer has_character_flag = has_recently_performed_raid } # Gotta have one child who qualifies as the aggressor. any_child = { fp1_0611_aggressive_child_candidate_trigger = yes } # And one child who qualifies as the bully. any_child = { fp1_0611_victim_child_candidate_trigger = yes } } weight_multiplier = { base = 1 # Weight up a little for each qualifying trait. modifier = { add = 0.25 has_trait = viking } modifier = { add = 0.25 has_trait = berserker } modifier = { add = 0.25 has_trait = adventurer } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0611 days = 1825 } # Grab the first child. random_child = { limit = { fp1_0611_aggressive_child_candidate_trigger = yes } save_scope_as = child_a } # And the second. random_child = { limit = { fp1_0611_victim_child_candidate_trigger = yes } save_scope_as = child_b } # Wound scope:child_b. scope:child_b = { increase_wounds_no_death_effect = { REASON = duel } } } # Explain to scope:child_a that they need to wait till they're older. option = { name = fp1_yearly.0611.a # Diplomacy duel to see if you manage the feelings involved. duel = { skill = diplomacy value = high_skill_rating # You successfully explain that fighting is not playing. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0611.a.tt_success send_interface_toast = { title = fp1_yearly.0611.a.tt_success left_icon = scope:child_a right_icon = scope:child_b scope:child_b = { progress_towards_friend_effect = { CHARACTER = scope:child_a OPINION = 50 REASON = friend_child_apologize } } } } # You only engender feelings of bitterness between the two. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0611.a.tt_failure send_interface_toast = { title = fp1_yearly.0611.a.tt_failure left_icon = scope:child_a right_icon = scope:child_b scope:child_b = { progress_towards_rival_effect = { REASON = rival_hit_with_sharp_stick CHARACTER = scope:child_a OPINION = -50 } } } } } stress_impact = { honest = minor_stress_impact_loss forgiving = minor_stress_impact_loss vengeful = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_honor = 0.25 ai_vengefulness = -0.25 } modifier = { # Weight up for stress. add = 10 has_trait = honest } modifier = { # Weight up for stress. add = 10 has_trait = forgiving } modifier = { # Weight down for stress. add = -20 has_trait = vengeful } } } # Laud scope:child_a for their goals. option = { name = fp1_yearly.0611.b # Scope:child_a is very happy & gains some prowess. scope:child_a = { add_prowess_skill = medium_skill_bonus } reverse_add_opinion = { target = scope:child_a modifier = love_opinion opinion = 40 } # Scope:child_b is very unhappy and grows close to a rivalry with scope:child_a. scope:child_b = { progress_towards_rival_effect = { REASON = rival_hit_with_sharp_stick CHARACTER = scope:child_a OPINION = -20 } } reverse_add_opinion = { target = scope:child_b modifier = trust_opinion opinion = -20 } stress_impact = { callous = minor_stress_impact_loss sadistic = minor_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = -0.5 ai_honor = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = callous } modifier = { # Weight up for stress. add = 10 has_trait = sadistic } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } } } # Teach scope:child_b how to deal with bullies. option = { name = fp1_yearly.0611.c # Scope:child_b is very happy & gains some prowess. scope:child_b = { add_prowess_skill = medium_skill_bonus } reverse_add_opinion = { target = scope:child_b modifier = love_opinion opinion = 40 } # Scope:child_a is unhappy. reverse_add_opinion = { target = scope:child_a modifier = trust_opinion opinion = -20 } stress_impact = { fickle = minor_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_honor = 0.5 ai_vengefulness = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = fickle } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } } } # Tell them to take it to their nurse. option = { name = fp1_yearly.0611.d # Lose stress. ## Stress loss handled in stress_impact. # But also opinion with both children. reverse_add_opinion = { target = scope:child_a modifier = trust_opinion opinion = -20 } reverse_add_opinion = { target = scope:child_b modifier = hurt_opinion opinion = -20 } # And we set up a hidden rivalry anyway. hidden_effect = { scope:child_b = { if = { limit = { can_set_relation_potential_rival_trigger = { CHARACTER = scope:child_a } } set_relation_potential_rival = scope:child_a } } } stress_impact = { base = medium_stress_loss lazy = minor_stress_impact_loss callous = minor_stress_impact_loss diligent = minor_stress_impact_gain compassionate = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = -0.5 ai_energy = -0.5 ai_boldness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight up for stress. add = 10 has_trait = callous } modifier = { # Weight down for stress. add = -10 has_trait = diligent } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } } } } ################################################## # A Shiny New Toy # by Ewan Cowhig Croft # 0621 - 0630 ################################################## scripted_trigger fp1_0621_valid_child_wants_loot_trigger = { # Must be around. child_suitable_to_play_with_character_one_sided = { CHARACTER = scope:raider } # Quiet children aren't going to come down to the beach. childhood_quiet_child_trigger = no } # Your child asks you which piece of raid loot is theirs. fp1_yearly.0621 = { type = character_event title = fp1_yearly.0621.t desc = fp1_yearly.0621.desc theme = war left_portrait = { character = scope:raider animation = personality_rational } right_portrait = { character = scope:child animation = admiration } override_background = { reference = fp1_beached_longships } # Triggers handled in the setup event. # Weight multipliers handled in the setup event. immediate = { add_character_flag = { flag = had_event_fp1_yearly_0621 days = 1825 } # Grab a suitable child. random_child = { limit = { fp1_0621_valid_child_wants_loot_trigger = yes } # Weight up greedier children. weight = { base = 0 modifier = { add = ai_greed } } save_scope_as = child } # Save a dummy gender for raid victims; reflects your child's biases rather than your actual experiences. random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_gender } } # Of course you can take the big trophy. option = { name = fp1_yearly.0621.a # Scope:child gains lots of opinion of you. reverse_add_opinion = { target = scope:child modifier = love_opinion opinion = 50 } # But you lose some gold. remove_short_term_gold = minor_gold_value stress_impact = { generous = medium_stress_impact_loss greedy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_greed = -0.5 } modifier = { # Weight down for stress. add = -20 has_trait = greedy } modifier = { # Weight up for stress. add = 20 has_trait = generous } } } # Nothing now: maybe when you're older, you can earn your own. option = { name = fp1_yearly.0621.b # Scope:child gains some opinion of you. reverse_add_opinion = { target = scope:child modifier = respect_opinion opinion = 10 } # A fairly mild response, so no stress to be garnered. ai_chance = { base = 100 ai_value_modifier = { ai_honor = 0.5 ai_boldness = 0.5 } } } # Away with you! This is for the adults. option = { name = fp1_yearly.0621.c # Gain some prestige. add_prestige = minor_prestige_gain # Scope:child is upset. reverse_add_opinion = { target = scope:child modifier = hurt_opinion opinion = -20 } stress_impact = { impatient = minor_stress_impact_loss greedy = medium_stress_impact_loss patient = minor_stress_impact_gain generous = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.25 ai_compassion = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = impatient } modifier = { # Weight up for stress. add = 20 has_trait = greedy } modifier = { # Weight down for stress. add = -10 has_trait = patient } modifier = { # Weight down for stress. add = -20 has_trait = generous } } } } # Setup event to sort triggers, scopes, etc. fp1_yearly.0622 = { hidden = yes scope = army trigger = { # DLC check. has_fp1_dlc_trigger = yes # Root must have been leading the army personally. army_commander = scope:raider # And some actual loot must have been recovered. raid_loot >= 10 # In which case we take a look at scope:raider & see how they stack up. scope:raider = { # Standard checks. is_available_adult_or_is_commanding = yes NOT = { has_character_flag = had_event_fp1_yearly_0621 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_coastal_norse_tribal = yes # And must have a valid child laying about. any_child = { fp1_0621_valid_child_wants_loot_trigger = yes} } } weight_multiplier = { base = 1 # Weight up a little for dedicated raiders. modifier = { add = 1 scope:raider = { has_trait = viking } } # Or if you've brought home a truly excessive amount of loot. modifier = { add = 1 raid_loot >= 200 } } immediate = { save_scope_as = raiding_army scope:raider = { trigger_event = fp1_yearly.0621 } } } ################################################## # A Cynical Bent # by Ewan Cowhig Croft # 0631 - 0640 ################################################## scripted_trigger fp1_0631_suitable_cynical_knight_trigger = { # Must be in the correct army. knight_army ?= $ARMY$ # Has to share scope:raider's faith. faith = scope:raider.faith # Can't be zealous. NOT = { has_trait = zealous } # And must have at least decent learning. learning >= decent_skill_rating } # You notice a courtier refuses to sacrifice after a raid. fp1_yearly.0631 = { type = character_event title = fp1_yearly.0631.t desc = fp1_yearly.0631.desc theme = faith left_portrait = { character = scope:cynic animation = personality_cynical } override_background = { reference = fp1_beached_longships } # Triggers handled in the setup event. # Weight multipliers handled in the setup event. immediate = { add_character_flag = { flag = had_event_fp1_yearly_0631 days = 1825 } # Grab an appropriate knight. random_knight = { limit = { fp1_0631_suitable_cynical_knight_trigger = { ARMY = scope:raiding_army } } # Weight up cynical knights. weight = { base = 0 modifier = { add = { value = ai_zeal multiply = -1 } } } save_scope_as = cynic } } # Lecture them for their impiety. option = { name = fp1_yearly.0631.a # Learning duel over piety. duel = { skill = learning target = scope:cynic # You succeed in shaming scope:knight. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0631.a.tt_success send_interface_toast = { title = fp1_yearly.0631.a.tt_success left_icon = scope:cynic add_piety = medium_piety_gain reverse_add_opinion = { target = scope:cynic modifier = annoyed_opinion opinion = -20 } } } # Scope:knight makes you look like a fool. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0631.a.tt_failure send_interface_toast = { title = fp1_yearly.0631.a.tt_failure left_icon = scope:cynic add_piety = minor_piety_loss reverse_add_opinion = { target = scope:cynic modifier = respect_opinion opinion = -30 } } } } stress_impact = { gregarious = minor_stress_impact_loss generous = minor_stress_impact_loss vengeful = minor_stress_impact_loss zealous = major_stress_impact_loss greedy = major_stress_impact_loss shy = medium_stress_impact_gain forgiving = medium_stress_impact_gain # Event cannot be triggered if you have cynical. } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.5 ai_greed = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = gregarious } modifier = { # Weight up for stress. add = 10 has_trait = generous } modifier = { # Weight up for stress. add = 10 has_trait = vengeful } modifier = { # Weight up for stress. add = 30 has_trait = zealous } modifier = { # Weight up for stress. add = 30 has_trait = greedy } modifier = { # Weight down for stress. add = -20 has_trait = shy } modifier = { # Weight down for stress. add = -20 has_trait = forgiving } } } # Quietly keep your own tribute too. option = { name = fp1_yearly.0631.b # Gain a little gold. add_gold = tiny_gold_value # Lose a little piety. add_piety = miniscule_piety_loss stress_impact = { greedy = medium_stress_impact_loss generous = medium_stress_impact_gain zealous = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_greed = 0.5 ai_zeal = -0.5 } modifier = { # Weight up for stress. add = 20 has_trait = greedy } modifier = { # Weight down for stress. add = -20 has_trait = generous } modifier = { # Weight down for stress. add = -30 has_trait = zealous } } } # Shrug and move on. option = { name = fp1_yearly.0631.c # Gain opinion with scope:knight. reverse_add_opinion = { target = scope:cynic modifier = grateful_opinion opinion = 20 } stress_impact = { forgiving = medium_stress_impact_loss vengeful = medium_stress_impact_gain zealous = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = -0.25 ai_greed = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 20 has_trait = forgiving } modifier = { # Weight down for stress. add = -20 has_trait = vengeful } modifier = { # Weight down for stress. add = -30 has_trait = zealous } } } } # Setup event to sort triggers, scopes, etc. fp1_yearly.0632 = { hidden = yes scope = army trigger = { # DLC check. has_fp1_dlc_trigger = yes # Root must have been leading the army personally. army_commander = scope:raider # And some actual loot must have been recovered. raid_loot >= 10 # In which case we take a look at scope:raider & see how they stack up. scope:raider = { # Standard checks. is_available_adult_or_is_commanding = yes NOT = { has_character_flag = had_event_fp1_yearly_0631 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_coastal_norse_tribal = yes # And there's an appropriate knightly target. any_knight = { fp1_0631_suitable_cynical_knight_trigger = { ARMY = root } } # And remove any dedicated cynics. NOT = { has_trait = cynical } } } weight_multiplier = { base = 1 # Weight up a little for the zealous, who are more likely to notice. modifier = { add = 1 scope:raider = { has_trait = zealous } } } immediate = { save_scope_as = raiding_army scope:raider = { trigger_event = fp1_yearly.0631 } } } ################################################## # Worthy of the Ocean # by Ewan Cowhig Croft # 0641 - 0650 ################################################## scripted_trigger fp1_0641_raider_with_longships_trigger = { can_raid_trigger = yes culture = { has_innovation = innovation_longboats } any_sub_realm_county = { is_coastal_county = yes } } scripted_trigger fp1_0641_neighbouring_ruler_with_stealable_ships_trigger = { # Doesn't have a friendly relationship with root. has_friendly_relationship_with_root_trigger = no # Has stealable longboats. fp1_0641_raider_with_longships_trigger = yes } # Your longships seem to be in poor nick. fp1_yearly.0641 = { type = character_event title = fp1_yearly.0641.t desc = fp1_yearly.0641.desc theme = intrigue left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:neighbour animation = dismissal } override_background = { reference = fp1_beached_longships } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0641 } is_landed = yes # Filter to flavour-appropriate characters. fp1_0641_raider_with_longships_trigger = yes } weight_multiplier = { base = 1 # Weight down a little if you're a raider or diligent, used to keeping your longships in tip-top condition. modifier = { add = -0.5 has_trait = viking } modifier = { add = -0.5 has_trait = diligent } # And up a little for adventurers and the lazy, who wear their ships hard & can't be arsed respectively. modifier = { add = 0.5 has_trait = adventurer } modifier = { add = 0.5 has_trait = lazy } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0641 days = 1825 } # Try to grab a suitable neighbour. if = { limit = { any_neighboring_and_across_water_realm_same_rank_owner = { fp1_0641_neighbouring_ruler_with_stealable_ships_trigger = yes } } random_neighboring_and_across_water_realm_same_rank_owner = { # Prefer rivals first. limit = { any_neighboring_and_across_water_realm_same_rank_owner = { any_relation = { type = rival this = root } fp1_0641_neighbouring_ruler_with_stealable_ships_trigger = yes } } # Otherwise, just whoever. alternative_limit = { any_neighboring_and_across_water_realm_same_rank_owner = { fp1_0641_neighbouring_ruler_with_stealable_ships_trigger = yes } } save_scope_as = neighbour } } } # Pay to fix them. option = { name = fp1_yearly.0641.a trigger = { can_make_expensive_purchase_trigger = { PRICE = minor_gold_value } } # The boat are repaired without issue. custom_tooltip = fp1_yearly.0641.a.tt # Lose a little gold. remove_treasury_or_gold = minor_treasury_or_gold_value stress_impact = { generous = minor_stress_impact_loss honest = minor_stress_impact_loss greedy = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.5 ai_greed = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = generous } modifier = { # Weight up for stress. add = 10 has_trait = honest } modifier = { # Weight down for stress. add = -10 has_trait = greedy } } } # Steal some from a neighbouring ruler. option = { name = fp1_yearly.0641.b trigger = { exists = scope:neighbour } # Intrigue duel to nab the boats in the night. duel = { skill = intrigue target = scope:neighbour # You heist the longships gleefully. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0641.b.tt_success send_interface_toast = { title = fp1_yearly.0641.b.tt_success left_icon = scope:neighbour add_character_modifier = { modifier = fp1_excellent_longships_modifier years = 10 } reverse_add_opinion = { target = scope:neighbour modifier = angry_opinion opinion = -50 } } } # You're caught and have to leg it. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0641.b.tt_failure send_interface_toast = { title = fp1_yearly.0641.b.tt_failure left_icon = scope:neighbour add_character_modifier = { modifier = fp1_rotting_longships_modifier years = 10 } reverse_add_opinion = { target = scope:neighbour modifier = annoyed_opinion opinion = -20 } } } } # Try to earmark scope:neighbour as a potential rival. hidden_effect = { if = { limit = { can_set_relation_potential_rival_trigger = { CHARACTER = scope:neighbour } } set_relation_potential_rival = scope:neighbour } } stress_impact = { arbitrary = minor_stress_impact_loss greedy = medium_stress_impact_loss deceitful = medium_stress_impact_loss just = minor_stress_impact_gain generous = medium_stress_impact_gain honest = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_greed = 0.5 ai_rationality = 0.25 ai_honor = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = arbitrary } modifier = { # Weight up for stress. add = 20 has_trait = greedy } modifier = { # Weight up for stress. add = 20 has_trait = deceitful } modifier = { # Weight down for stress. add = -10 has_trait = just } modifier = { # Weight down for stress. add = -20 has_trait = generous } modifier = { # Weight down for stress. add = -20 has_trait = honest } } } # Commission new vessels from a fancy shipwright. option = { name = fp1_yearly.0641.c trigger = { can_make_expensive_purchase_trigger = { PRICE = medium_gold_value } } # Gain a modifier boosting naval speed & reducing embark cost. add_character_modifier = { modifier = fp1_excellent_longships_modifier years = 10 } # Lose a bit more gold. remove_treasury_or_gold = medium_treasury_or_gold_value stress_impact = { diligent = minor_stress_impact_loss generous = medium_stress_impact_loss lazy = minor_stress_impact_gain greedy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.5 ai_greed = -1 } modifier = { # Weight up for stress. add = 10 has_trait = diligent } modifier = { # Weight up for stress. add = 20 has_trait = generous } modifier = { # Weight down for stress. add = -10 has_trait = lazy } modifier = { # Weight down for stress. add = -20 has_trait = greedy } } } # Bah, let them rot. What's the harm? option = { name = fp1_yearly.0641.d # Gain a modifier reducing naval speed & increasing embark cost. add_character_modifier = { modifier = fp1_rotting_longships_modifier years = 10 } # Someone else's problem, right? ## Stress loss handled in stress impact. stress_impact = { base = major_stress_loss lazy = medium_stress_impact_loss greedy = medium_stress_impact_loss diligent = medium_stress_impact_gain generous = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.25 ai_greed = -0.5 ai_energy = -0.75 } modifier = { # Weight up for stress. add = 20 has_trait = lazy } modifier = { # Weight up for stress. add = 20 has_trait = greedy } modifier = { # Weight down for stress. add = -20 has_trait = diligent } modifier = { # Weight down for stress. add = -20 has_trait = generous } } } } ################################################## # Leviathan # by Ewan Cowhig Croft # 0651 - 0660 ################################################## # You're out sailing when you spot a whale. fp1_yearly.0651 = { type = character_event title = fp1_yearly.0651.t desc = fp1_yearly.0651.desc theme = hunt_activity left_portrait = { character = root animation = shock } override_background = { reference = fp1_ocean_norse } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0651 } is_playable_character = yes is_landed = yes # Must have a coastal capital. capital_county = { is_coastal_county = yes } } weight_multiplier = { base = 1 # Weight up for the Norse a bit. modifier = { add = 1 fp1_is_norse = yes } # Raiders spend more time at sea. Probably. Vikings do at least. modifier = { add = 1 has_trait = viking } # Adventurers spend more time at sea. Also probably. modifier = { add = 1 has_trait = adventurer } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0651 years = 50 } } # Static gold is used rather than dynamic throughout this event. This is to account for whale value not adjusting with your scale (even if it probably should with region): a gold mine for a poor tribal is a month's tax for a highly developed king. # Get the harpoons! option = { name = fp1_yearly.0651.a # Prowess challenge to slaughter the whale. duel = { skill = prowess value = decent_skill_rating # You haul the whale to shore and butcher it. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0651.a.tt_success send_interface_toast = { title = fp1_yearly.0651.a.tt_success left_icon = root # Per the comment below the immediate block, the static gold is deliberate. add_gold = 100 } } # The beast escapes you. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0651.a.tt_failure send_interface_toast = { title = fp1_yearly.0651.a.tt_failure left_icon = root add_prestige = minor_prestige_loss } } } stress_impact = { vengeful = miniscule_stress_impact_loss # From Hell's Heart I stab at thee, etc. brave = major_stress_impact_loss craven = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_energy = 0.5 ai_compassion = -0.25 } modifier = { # Weight up for stress. add = 5 has_trait = vengeful } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # Just bring me the carcass. option = { name = fp1_yearly.0651.b # Gain some minor gold. ## Per the comment below the immediate block, the static gold is deliberate. add_gold = 50 stress_impact = { greedy = minor_stress_impact_loss generous = minor_stress_impact_gain compassionate = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = -0.25 ai_energy = -0.25 ai_compassion = -0.25 } modifier = { # Weight up for stress. add = 10 has_trait = greedy } modifier = { # Weight down for stress. add = -10 has_trait = generous } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } } } # (Hunter) A *grand* quarry! option = { name = fp1_yearly.0651.c trigger = { has_trait = lifestyle_hunter } trait = lifestyle_hunter # You face a *true* leviathan. custom_tooltip = fp1_yearly.0651.c.tt # More difficult prowess challenge for greater rewards. duel = { skill = prowess value = very_high_skill_rating # You haul the whale to shore and butcher it. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0651.c.tt_success send_interface_toast = { title = fp1_yearly.0651.c.tt_success left_icon = root # Per the comment below the immediate block, the static gold is deliberate. add_gold = 300 } } # The beast escapes you. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0651.c.tt_failure send_interface_toast = { title = fp1_yearly.0651.c.tt_failure left_icon = root increase_wounds_effect = { REASON = hunting_accident } add_prestige = minor_prestige_loss } } } stress_impact = { vengeful = miniscule_stress_impact_loss # From Hell's Heart I stab at thee, etc. brave = major_stress_impact_loss craven = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.75 ai_energy = 0.75 ai_compassion = -0.25 } modifier = { # Weight up for stress. add = 5 has_trait = vengeful } modifier = { # Weight up for stress. add = 30 has_trait = brave } modifier = { # Weight down for stress. add = -30 has_trait = craven } } } # A creature of fearsome majesty, leave it. option = { name = fp1_yearly.0651.d # The whale goes free. custom_tooltip = fp1_yearly.0651.d.tt # You gain a little prestige for your kindness. add_prestige = minor_prestige_gain stress_impact = { generous = minor_stress_impact_loss compassionate = medium_stress_impact_loss craven = major_stress_impact_loss greedy = medium_stress_impact_gain sadistic = medium_stress_impact_gain brave = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_boldness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = generous } modifier = { # Weight up for stress. add = 20 has_trait = compassionate } modifier = { # Weight up for stress. add = 30 has_trait = craven } modifier = { # Weight down for stress. add = -20 has_trait = greedy } modifier = { # Weight down for stress. add = -20 has_trait = sadistic } modifier = { # Weight down for stress. add = -30 has_trait = brave } } } } ################################################## # A Novel Challenge # by Ewan Cowhig Croft # 0661 - 0670 ################################################## scripted_trigger fp1_0661_knight_appropriate_for_skiing_trigger = { # Has to be around. is_available_ai_adult = yes # And in the capital. location = root.location # And have no disqualifying traits. NOR = { # Personality blockers. has_trait = shy has_trait = lazy has_trait = humble has_trait = craven # Not that it's impossible, just unlikely for the period & tech level. has_trait = one_legged } # Finally, no negative relationship with root. has_any_bad_relationship_with_root_trigger = no } # One of your knights challenges you to skiing. fp1_yearly.0661 = { type = character_event title = fp1_yearly.0661.t desc = fp1_yearly.0661.desc theme = friendly left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:knight animation = personality_bold } override_background = { reference = feast } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_at_peace_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0661 } is_playable_character = yes # Must be a suitable culture. culture_uses_frequent_winter_transportation_trigger = yes # Gotta have snow in the capital. character_capital_has_winter_trigger = yes # And have an available knight. any_knight = { fp1_0661_knight_appropriate_for_skiing_trigger = yes } } weight_multiplier = { base = 1 # Weight according to winter scale. character_capital_has_snow_suitable_for_activities = { CHARACTER = root } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0661 days = 1825 } # Grab an appropriate knight. random_knight = { limit = { fp1_0661_knight_appropriate_for_skiing_trigger = yes } save_scope_as = knight } } # How unusual! I accept! option = { name = fp1_yearly.0661.a trigger = { NOT = { has_trait = winter_soldier } } # Prowess duel vs. scope:knight. duel = { skill = prowess target = scope:knight # It's close, but you win! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0661.a.tt_success send_interface_toast = { title = fp1_yearly.0661.a.tt_success left_icon = scope:knight add_prestige = minor_prestige_gain progress_towards_friend_effect = { CHARACTER = scope:knight OPINION = 30 REASON = friend_ski_race } } } # Scope:knight skids to victory. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0661.a.tt_failure send_interface_toast = { title = fp1_yearly.0661.a.tt_failure left_icon = scope:knight add_prestige = minor_prestige_loss progress_towards_friend_effect = { CHARACTER = scope:knight OPINION = 10 REASON = friend_ski_race } } } } stress_impact = { brave = medium_stress_impact_loss craven = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 0.5 ai_boldness = 0.5 ai_honor = 0.5 ai_sociability = 0.25 } modifier = { # Weight up for stress. add = 20 has_trait = brave } modifier = { # Weight down for stress. add = -20 has_trait = craven } } } # Winter Soldier: Out in the snow? I accept. option = { name = fp1_yearly.0661.a.2 trigger = { has_trait = winter_soldier } trait = winter_soldier custom_tooltip = fp1_yearly.0661.a.2.tt add_prestige = minor_prestige_gain progress_towards_friend_effect = { CHARACTER = scope:knight OPINION = 50 REASON = friend_ski_race } stress_impact = { diligent = minor_stress_impact_loss lazy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 0.5 ai_boldness = 0.5 ai_honor = 0.5 ai_sociability = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = diligent } modifier = { # Weight down for stress. add = -20 has_trait = lazy } } } # Hobble the competition, then race. option = { name = fp1_yearly.0661.b # Intrigue duel vs. scope:knight. duel = { skill = intrigue target = scope:knight # My, what an *effortless* win you have there. 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0661.b.tt_success send_interface_toast = { title = fp1_yearly.0661.b.tt_success left_icon = scope:knight add_prestige = medium_prestige_gain reverse_add_opinion = { target = scope:knight modifier = suspicion_opinion opinion = -5 } } } # Scope:knight discovers you in the act. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0661.b.tt_failure send_interface_toast = { title = fp1_yearly.0661.b.tt_failure left_icon = scope:knight add_prestige = medium_prestige_loss progress_towards_rival_effect = { REASON = rival_attempted_to_cheat_race CHARACTER = scope:knight OPINION = -40 } } } } stress_impact = { arbitrary = minor_stress_impact_loss deceitful = medium_stress_impact_loss just = minor_stress_impact_gain honest = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 0.5 ai_boldness = 0.5 ai_sociability = 0.25 ai_honor = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = arbitrary } modifier = { # Weight up for stress. add = 20 has_trait = deceitful } modifier = { # Weight down for stress. add = -10 has_trait = just } modifier = { # Weight down for stress. add = -20 has_trait = honest } } } # *Competitive* skiing? With no hunting? Get lost. option = { name = fp1_yearly.0661.c # Some minor opt-out prestige. add_prestige = miniscule_prestige_gain # You upset scope:knight a bit, though. reverse_add_opinion = { target = scope:knight modifier = disappointed_opinion opinion = -10 } stress_impact = { lazy = minor_stress_impact_loss craven = minor_stress_impact_loss lifestyle_hunter = medium_stress_impact_loss brave = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = -0.25 ai_boldness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight up for stress. add = 10 has_trait = craven } modifier = { # Weight up for stress. add = 20 has_trait = lifestyle_hunter } modifier = { # Weight down for stress. add = -10 has_trait = brave } } } } ################################################## # A Slippery Slope # by Ewan Cowhig Croft # 0671 - 0680 ################################################## scripted_trigger fp1_0671_available_older_sibling_trigger = { this != scope:child child_suitable_to_play_with_character_one_sided = { CHARACTER = root } # Should be older than scope:child. age > scope:child.age # Mustn't have a terribly negative relationship with scope:child. NOT = { has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:child } } opinion = { target = scope:child value >= medium_negative_opinion } } # Your child wants you to go sledding with them. fp1_yearly.0671 = { type = character_event title = fp1_yearly.0671.t desc = fp1_yearly.0671.desc theme = family left_portrait = { character = root animation = happiness } right_portrait = { character = scope:child animation = admiration } lower_right_portrait = scope:sibling override_background = { reference = bedchamber } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0671 } is_landed = yes # Gotta have snow in the capital. character_capital_has_winter_trigger = yes # And an available child. any_child = { child_suitable_to_play_with_character_one_sided = { CHARACTER = root } } } weight_multiplier = { base = 1 # Weight according to winter scale. character_capital_has_snow_suitable_for_activities = { CHARACTER = root } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0671 days = 1825 } # Grab a suitable child. random_child = { limit = { child_suitable_to_play_with_character_one_sided = { CHARACTER = root } } save_scope_as = child } # If there's a suitable sibling, nab them for later. if = { limit = { any_child = { fp1_0671_available_older_sibling_trigger = yes } } random_child = { limit = { fp1_0671_available_older_sibling_trigger = yes } save_scope_as = sibling } } add_character_flag = { flag = use_sickness_clothes days = 1 } } # (Strong/Physique_Good) Hah, let me just haul this table out for us! option = { name = fp1_yearly.0671.a trigger = { OR = { has_trait = strong has_trait = physique_good } } trait = strong trait = physique_good_1 trait = physique_good_2 trait = physique_good_3 # Gain huge opinion boost with scope:child. reverse_add_opinion = { target = scope:child modifier = love_opinion opinion = 50 } # Grow closer to becoming friends with scope:child, if possible. progress_towards_friend_effect = { CHARACTER = scope:child OPINION = 0 REASON = friend_sledding } stress_impact = { gregarious = minor_stress_impact_loss diligent = minor_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_energy = 0.5 ai_sociability = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = gregarious } modifier = { # Weight up for stress. add = 10 has_trait = diligent } modifier = { # Weight down for stress. add = -10 has_trait = lazy } } } # Come on, let's get a tray from the kitchen. option = { name = fp1_yearly.0671.b trigger = { NOR = { has_trait = strong has_trait = physique_good } } # Gain large opinion boost with scope:child. reverse_add_opinion = { target = scope:child modifier = love_opinion opinion = 25 } stress_impact = { gregarious = minor_stress_impact_loss diligent = minor_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_energy = 0.5 ai_sociability = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = gregarious } modifier = { # Weight up for stress. add = 10 has_trait = diligent } modifier = { # Weight down for stress. add = -10 has_trait = lazy } } } # Go ask your [sibling]. option = { name = fp1_yearly.0671.c trigger = { exists = scope:sibling } # Scope:child & scope:sibling both gain opinion of each other. scope:child = { progress_towards_friend_effect = { CHARACTER = scope:sibling OPINION = 30 REASON = friend_sledding } } # Quite a mild response, so no stress involved. ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_energy = -0.25 ai_sociability = -0.25 } } } # Away with you, I'm busy. option = { name = fp1_yearly.0671.d # Lose stress. ## Stress loss handled in stress_impact. # But also opinion with scope:child. reverse_add_opinion = { target = scope:child modifier = disappointed_opinion opinion = -20 } stress_impact = { base = major_stress_loss lazy = minor_stress_impact_loss callous = minor_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = -0.25 ai_sociability = -0.25 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = lazy } modifier = { # Weight up for stress. add = 10 has_trait = callous } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } } } # Get out of your pajamas. after = { remove_character_flag = use_sickness_clothes } } ################################################## # Why Can't I Come? # by Ewan Cowhig Croft # 0681 - 0690 ################################################## scripted_trigger fp1_0681_haughty_knights_trigger = { # Has enough prowess that they're proud of it. prowess >= medium_skill_rating # And lacks any humbling traits. NOR = { has_trait = humble has_trait = compassionate has_trait = forgiving } } scripted_trigger fp1_0681_child_that_might_like_raiding_trigger = { # Must be around. child_suitable_to_play_with_character_one_sided = { CHARACTER = root } # We want basically anyone who might think it's exciting. NOT = { has_trait = pensive } } # One of your children wants to know why they can't come raiding. fp1_yearly.0681 = { type = character_event title = fp1_yearly.0681.t desc = fp1_yearly.0681.desc theme = war left_portrait = { character = root animation = personality_content } right_portrait = { character = scope:child animation = admiration } override_background = { reference = study } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_at_peace_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0681 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_coastal_norse_tribal = yes # Raiding must be recent or ever-present. OR = { has_trait = viking has_character_flag = has_recently_performed_raid } # At least some of your knights should be snobbish. any_knight = { fp1_0681_haughty_knights_trigger = yes } # And you must have a suitable child. any_child = { fp1_0681_child_that_might_like_raiding_trigger = yes } } weight_multiplier = { base = 1 # Weight up a bit for adventurers & vikings. modifier = { add = 0.5 has_trait = adventurer } modifier = { add = 0.5 has_trait = viking } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0681 days = 1825 } # Grab a suitable child. random_child = { limit = { fp1_0681_child_that_might_like_raiding_trigger = yes } save_scope_as = child } } # I'm leaving you to guard [capital], ok? option = { name = fp1_yearly.0681.a # Gain opinion with scope:child. reverse_add_opinion = { target = scope:child modifier = trust_opinion opinion = 20 } stress_impact = { compassionate = minor_stress_impact_loss callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.75 ai_sociability = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = compassionate } modifier = { # Weight down for stress. add = -10 has_trait = callous } modifier = { # Weight down for stress. add = -10 has_trait = sadistic } } } # _Hah_! You'll never be a true warrior, child. option = { name = fp1_yearly.0681.b # Gain opinion with all of your haughty knights. every_knight = { limit = { fp1_0681_haughty_knights_trigger = yes } custom = fp1_yearly.0681.b.haughty_knights add_opinion = { target = root modifier = respect_opinion opinion = 15 } } # Lose opinion with scope:child. reverse_add_opinion = { target = scope:child modifier = hurt_opinion opinion = -30 } # Add hidden potential rivalry if possible. hidden_effect = { if = { limit = { can_set_relation_potential_rival_trigger = { CHARACTER = scope:child } } set_relation_potential_rival = scope:child } } stress_impact = { callous = minor_stress_impact_loss sadistic = minor_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.25 ai_compassion = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = callous } modifier = { # Weight up for stress. add = 10 has_trait = sadistic } modifier = { # Weight down for stress. add = -10 has_trait = compassionate } } } # We'll talk about it when you're older. option = { name = fp1_yearly.0681.c # Gain some minor opinion with your knights. every_knight = { custom = custom.every_knight add_opinion = { target = root modifier = respect_opinion opinion = 5 } } # But lose opinion with scope:child. reverse_add_opinion = { target = scope:child modifier = disappointed_opinion opinion = -10 } # Mild response, incurs no stress. ai_chance = { base = 100 ai_value_modifier = { ai_energy = -0.25 ai_boldness = -0.25 ai_sociability = -0.25 } } } } ################################################## # Attempted Atonement # by Ewan Cowhig Croft # 0691 - 0700 ################################################## scripted_trigger fp1_0692_valid_convertable_knight_trigger = { # Must be in the army's location. location = root.location # & share scope:raider's faith, which isn't reformed. faith = { this = scope:raider.faith has_doctrine_parameter = unreformed } # Shouldn't have anything that might block them from converting. NOR = { has_trait = arrogant has_trait = content has_trait = cynical has_trait = zealous has_trait = paranoid # Sadists are too busy for introspection. has_trait = sadistic } # And should be landless. is_courtier_of = scope:raider # Children can be rebellious, but we should probably filter them out too. NOT = { any_parent = { this = scope:raider } } } scripted_trigger fp1_0691_knight_still_valid_convertable_trigger = { # Has all the appropriate variables; they come as a matched pair, but just in case. has_variable = raid_convert_county has_variable = raid_convert_faith # Standard checks. is_available_ai_adult = yes is_courtier_of = root # Make sure that they're still of root's faith, and that root hasn't converted to their new faith. faith = root.faith NOT = { this.var:raid_convert_faith = root.faith } # Shouldn't have become committed to a religious stance, but just check they've not managed to sneak-acquire traits in the meanwhilst. NOR = { has_trait = zealous has_trait = cynical } } # One of your knights finds new faith after a raid. fp1_yearly.0691 = { type = character_event title = fp1_yearly.0691.t desc = fp1_yearly.0691.desc theme = war left_portrait = { character = root animation = shock } right_portrait = { character = scope:knight animation = personality_zealous } override_background = { reference = throne_room } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_at_peace_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_0691 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_norse_tribal = yes # There must be at least one knight who's had a crisis of conscience. any_knight = { fp1_0691_knight_still_valid_convertable_trigger = yes } } weight_multiplier = { base = 1 # Knights feel more comfortable converting away if you're not particularly religious. modifier = { add = 0.5 has_trait = cynical } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_0691 days = 3650 } # Grab a suitable knight. random_knight = { limit = { fp1_0691_knight_still_valid_convertable_trigger = yes } weight = { base = 0 # Weight up fickle & trusting characters. ## Fickle characters are more likely to heel-face-turn on their pillaging faith. modifier = { add = 100 has_trait = fickle } ## Trusting characters are more gullible, and they *did* take thralls. modifier = { add = 100 has_trait = trusting } } save_scope_as = knight } # Convert them & boost their zeal. scope:knight = { set_character_faith = this.var:raid_convert_faith add_trait = zealous } # Grab the source county for loc. scope:knight.var:raid_convert_county = { save_scope_as = county } } # Surely I can talk you out of this foreign faith? option = { name = fp1_yearly.0691.a # Learning duel to get them to recant & stay. duel = { skill = learning target = scope:knight # You bring them back to the light. 40 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } desc = fp1_yearly.0691.a.tt_success send_interface_toast = { title = fp1_yearly.0691.a.tt_success left_icon = scope:knight # They reconvert. scope:knight = { set_character_faith = root.faith } # And you either get a hook on them... if = { limit = { can_add_hook = { target = scope:knight type = favor_hook } } add_hook = { target = scope:knight type = favor_hook } } # Or a goodly chunk of opinion. else = { reverse_add_opinion = { target = scope:knight modifier = grateful_opinion opinion = 30 } } } } # They refuse and leave. 60 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } desc = fp1_yearly.0691.a.tt_failure send_interface_toast = { title = fp1_yearly.0691.a.tt_failure left_icon = scope:knight # They leave. scope:knight = { select_and_move_to_pool_effect = yes } # And they're none too happy with you. reverse_add_opinion = { target = scope:knight modifier = insult_opinion opinion = -25 } } } } stress_impact = { humble = minor_stress_impact_loss zealous = major_stress_impact_loss arrogant = minor_stress_impact_gain cynical = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.75 ai_boldness = 0.5 } modifier = { # Weight up for stress. add = 10 has_trait = humble } modifier = { # Weight up for stress. add = 30 has_trait = zealous } modifier = { # Weight down for stress. add = -10 has_trait = arrogant } modifier = { # Weight down for stress. add = -30 has_trait = cynical } } } # GetFaith.GetReligion.GetName? You've gone mad. Guards! option = { name = fp1_yearly.0691.b # Quietly move scope:knight to the pool so you're no longer their liege. hidden_effect = { scope:knight = { move_to_pool = yes } } # Throw scope:knight in the dungeon immediately. rightfully_imprison_character_effect = { TARGET = scope:knight IMPRISONER = root } hidden_effect = { scope:knight = { change_prison_type = dungeon } } # Scope:knight is understandably angry. reverse_add_opinion = { target = scope:knight modifier = hate_opinion opinion = -50 } # Quietly mark them for future rivalry. hidden_effect = { if = { limit = { can_set_relation_potential_rival_trigger = { CHARACTER = scope:knight } } set_relation_potential_rival = scope:knight } } # But, hey, piety & same-faith courtier & guest opinion. every_courtier_or_guest = { limit = { faith = root.faith NOT = { has_trait = cynical } } custom = fp1_yearly.0691.b.same_faith_courtiers_and_guests add_opinion = { target = root modifier = pious_opinion opinion = 10 } } stress_impact = { vengeful = major_stress_impact_loss zealous = major_stress_impact_loss forgiving = major_stress_impact_gain cynical = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.5 ai_vengefulness = 0.5 ai_energy = -0.25 } modifier = { # Weight up for stress. add = 30 has_trait = vengeful } modifier = { # Weight up for stress. add = 30 has_trait = zealous } modifier = { # Weight down for stress. add = -30 has_trait = forgiving } modifier = { # Weight down for stress. add = -30 has_trait = cynical } } } # You may go if you wish. option = { name = fp1_yearly.0691.c # Gain a little prestige. add_prestige = minor_prestige_gain # And the knight's gratitude. reverse_add_opinion = { target = scope:knight modifier = grateful_opinion opinion = 35 } # But lose the knight. scope:knight = { select_and_move_to_pool_effect = yes } stress_impact = { forgiving = major_stress_impact_loss cynical = major_stress_impact_loss vengeful = major_stress_impact_gain zealous = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress. add = 30 has_trait = forgiving } modifier = { # Weight up for stress. add = 30 has_trait = cynical } modifier = { # Weight down for stress. add = -30 has_trait = vengeful } modifier = { # Weight down for stress. add = -30 has_trait = zealous } } } } # Set-up event for raiding. fp1_yearly.0692 = { hidden = yes scope = army trigger = { # DLC check. has_fp1_dlc_trigger = yes # We only want to convert to reformed faiths. scope:county.faith = { NOT = { has_doctrine_parameter = unreformed } } # Check various prerequisites with scope:raider. scope:raider = { # Scope:raider shouldn't have had this event recently either. #NOT = { has_character_flag = had_event_fp1_yearly_0691 } # We don't want all raiding to result in tons of variables floating about. fp1_is_norse_tribal = yes # There must be at least one eligible knight in the raid army. any_knight = { fp1_0692_valid_convertable_knight_trigger = yes } } } immediate = { # Designate a suitable knight. scope:raider = { random_knight = { # Preferring those who might be more open to new ideas. limit = { fp1_0692_valid_convertable_knight_trigger = yes OR = { has_trait = humble has_trait = honest has_trait = ambitious has_trait = gregarious has_trait = arbitrary has_trait = trusting has_trait = fickle } } # But otherwise just anyone valid. alternative_limit = { fp1_0692_valid_convertable_knight_trigger = yes } # Remember the county it happened in. set_variable = { name = raid_convert_county value = scope:county years = 5 } # And the faith they'd like to convert to. set_variable = { name = raid_convert_faith value = scope:county.faith years = 5 } } } } } ################################################## # SPECIAL YEARLIES ################################################## # A Mysterious Stranger Stays at Court # by Ewan Cowhig Croft # 1001 - 1030 ################################################## scripted_trigger valid_germanic_faith_trigger = { #Small enough that it probably doesn't need a trigger, but might need to be more complex in future. religion = religion:germanic_religion } scripted_trigger valid_non_germanic_reformed_faith_trigger = { NOR = { faith = { has_doctrine_parameter = unreformed } religion = religion:germanic_religion } } scripted_effect fp1_mysterious_stranger_follow_up_event_picker_effect = { if = { limit = { scope:ms_type = flag:godi } trigger_event = fp1_yearly.1011 } else_if = { limit = { scope:ms_type = flag:missionary } trigger_event = fp1_yearly.1012 } else_if = { limit = { scope:ms_type = flag:nithing } trigger_event = fp1_yearly.1013 } else_if = { limit = { scope:ms_type = flag:warrior } trigger_event = fp1_yearly.1014 } #Trigger vagrant as the last possible thing. else = { trigger_event = fp1_yearly.1015 } } scripted_effect mysterious_stranger_disappears_effect = { custom_tooltip = fp1_yearly.1001.mysterious_stranger_disappears.tt hidden_effect = { scope:stranger = { death = { death_reason = death_vanished } } } } # You notice a stranger has been hanging around the court. fp1_yearly.1001 = { type = character_event title = fp1_yearly.1001.t desc = { desc = fp1_yearly.1001.desc.intro first_valid = { triggered_desc = { trigger = { scope:ms_behaviour_1 = flag:sneaks } desc = fp1_yearly.1001.desc.behaviour_1.sneaks } triggered_desc = { trigger = { scope:ms_behaviour_1 = flag:leaves_early } desc = fp1_yearly.1001.desc.behaviour_1.leaves_early } triggered_desc = { trigger = { scope:ms_behaviour_1 = flag:earnest } desc = fp1_yearly.1001.desc.behaviour_1.earnest } triggered_desc = { trigger = { scope:ms_behaviour_1 = flag:confident } desc = fp1_yearly.1001.desc.behaviour_1.confident } triggered_desc = { trigger = { scope:ms_behaviour_1 = flag:talkative } desc = fp1_yearly.1001.desc.behaviour_1.talkative } triggered_desc = { trigger = { scope:ms_behaviour_1 = flag:eats_their_fill } desc = fp1_yearly.1001.desc.behaviour_1.eats_their_fill } } first_valid = { triggered_desc = { trigger = { scope:ms_behaviour_2 = flag:sneaks } desc = fp1_yearly.1001.desc.behaviour_2.sneaks } triggered_desc = { trigger = { scope:ms_behaviour_2 = flag:leaves_early } desc = fp1_yearly.1001.desc.behaviour_2.leaves_early } triggered_desc = { trigger = { scope:ms_behaviour_2 = flag:earnest } desc = fp1_yearly.1001.desc.behaviour_2.earnest } triggered_desc = { trigger = { scope:ms_behaviour_2 = flag:confident } desc = fp1_yearly.1001.desc.behaviour_2.confident } triggered_desc = { trigger = { scope:ms_behaviour_2 = flag:talkative } desc = fp1_yearly.1001.desc.behaviour_2.talkative } triggered_desc = { trigger = { scope:ms_behaviour_2 = flag:eats_their_fill } desc = fp1_yearly.1001.desc.behaviour_2.eats_their_fill } } desc = fp1_yearly.1001.desc.outro } theme = intrigue left_portrait = { character = scope:stranger animation = personality_honorable } override_background = { reference = feast } trigger = { #DLC check. has_fp1_dlc_trigger = yes #Standard checks. is_available_even_at_war_adult = yes is_landed = yes NOT = { has_character_flag = had_event_fp1_yearly_1001 } #Scandinavian culture group, and within Scandinavia (plus a few other places). culture = { has_cultural_pillar = heritage_north_germanic } capital_province ?= { geographical_region = dlc_fp1_region_mysterious_stranger_locations } } weight_multiplier = { base = 1 } immediate = { add_character_flag = { flag = had_event_fp1_yearly_1001 days = 7300 } #Spawn a suitable mysterious stranger. ##Each of these has a list of traits that overlap with 1-2 other spawnable categories, as well as some unique tells. ##The idea is that they're structured enough to be able to guess (sorta) first time, but random enough that you won't always guess correctly. At the same time, learning the tells over time, and what makes a character definitely/definitely not a specific type of stranger, rewards repeated play. random_list = { #Spawn a godi. 100 = { #Requires some contact with Germanic Paganism. trigger = { OR = { valid_germanic_faith_trigger = yes any_sub_realm_county = { valid_germanic_faith_trigger = yes } any_neighboring_top_liege_realm_owner = { valid_germanic_faith_trigger = yes } } } #Create the character & set up details for later. create_character = { location = root.capital_province template = fp1_ms_godi_character save_scope_as = stranger } save_scope_value_as = { name = ms_type value = flag:godi } #Figure out what faith the godi would actually have. ##Only a random chance for now: this is to give same-religion separate-faith godis a chance to spawn if you're Germanic Pagan yourself. random = { chance = 50 if = { limit = { valid_germanic_faith_trigger = yes } faith = { save_scope_as = ms_faith } } } if = { limit = { NOT = { exists = scope:ms_faith } any_sub_realm_county = { valid_germanic_faith_trigger = yes } } random_sub_realm_county = { limit = { valid_germanic_faith_trigger = yes } faith = { save_scope_as = ms_faith } } } else_if = { limit = { any_neighboring_top_liege_realm_owner = { valid_germanic_faith_trigger = yes } } random_neighboring_top_liege_realm_owner = { limit = { valid_germanic_faith_trigger = yes } faith = { save_scope_as = ms_faith } } } else = { #If you hit this stage, go back to your own Germanic Pagan faith. faith = { save_scope_as = ms_faith } } } #Spawn a missionary from a reformed faith. 100 = { #Requires some contact with a reformed faith that isn't Germanic Pagan. trigger = { OR = { valid_non_germanic_reformed_faith_trigger = yes any_sub_realm_county = { valid_non_germanic_reformed_faith_trigger = yes } any_neighboring_top_liege_realm_owner = { valid_non_germanic_reformed_faith_trigger = yes } } } #Create the character & set up details for later. create_character = { location = root.capital_province template = fp1_ms_reformed_missionary_character save_scope_as = stranger } save_scope_value_as = { name = ms_type value = flag:missionary } #Figure out what faith the missionary would actually have. if = { limit = { valid_non_germanic_reformed_faith_trigger = yes } faith = { save_scope_as = ms_faith } } else_if = { limit = { any_sub_realm_county = { valid_non_germanic_reformed_faith_trigger = yes } } random_sub_realm_county = { limit = { valid_non_germanic_reformed_faith_trigger = yes } faith = { save_scope_as = ms_faith } } } else = { random_neighboring_top_liege_realm_owner = { limit = { valid_non_germanic_reformed_faith_trigger = yes } faith = { save_scope_as = ms_faith } } } } #Spawn a nithing. 100 = { #No requirements. #Create the character & set up details for later. create_character = { location = root.capital_province template = fp1_ms_nithing_character save_scope_as = stranger } save_scope_value_as = { name = ms_type value = flag:nithing } } #Spawn a warrior. 100 = { #No requirements. #Create the character & set up details for later. create_character = { location = root.capital_province template = fp1_ms_warrior_character save_scope_as = stranger } save_scope_value_as = { name = ms_type value = flag:warrior } } #Spawn an ordinary vagrant. ##These guys are the wild cards: they have no restrictions on anything, save that they suck at everything. Their job is to be confusing and make you uncertain. 100 = { #No requirements. #Create the character & set up details for later. create_character = { location = root.capital_province template = fp1_ms_vagrant_character save_scope_as = stranger } save_scope_value_as = { name = ms_type value = flag:vagrant } } } #Set behaviours. ##Each stranger type exhibits two of three possible behaviour patterns in the event description. All behaviour patterns overlap with at least one other stranger type, with the vagrant having access to all of them. random_list = { #Godi 100 = { trigger = { scope:ms_type = flag:godi } random_list = { 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:sneaks } } 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:leaves_early } } 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:earnest } } } random_list = { 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:sneaks } } save_scope_value_as = { name = ms_behaviour_2 value = flag:sneaks } } 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:leaves_early } } save_scope_value_as = { name = ms_behaviour_2 value = flag:leaves_early } } 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:earnest } } save_scope_value_as = { name = ms_behaviour_2 value = flag:earnest } } } } #Missionary 100 = { trigger = { scope:ms_type = flag:missionary } random_list = { 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:confident } } 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:leaves_early } } 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:talkative } } } random_list = { 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:confident } } save_scope_value_as = { name = ms_behaviour_2 value = flag:confident } } 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:leaves_early } } save_scope_value_as = { name = ms_behaviour_2 value = flag:leaves_early } } 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:talkative } } save_scope_value_as = { name = ms_behaviour_2 value = flag:talkative } } } } #Nithing 100 = { trigger = { scope:ms_type = flag:nithing } random_list = { 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:sneaks } } 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:eats_their_fill } } 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:earnest } } } random_list = { 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:sneaks } } save_scope_value_as = { name = ms_behaviour_2 value = flag:sneaks } } 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:eats_their_fill } } save_scope_value_as = { name = ms_behaviour_2 value = flag:eats_their_fill } } 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:earnest } } save_scope_value_as = { name = ms_behaviour_2 value = flag:earnest } } } } #Warrior 100 = { trigger = { scope:ms_type = flag:warrior } random_list = { 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:confident } } 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:eats_their_fill } } 33 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:talkative } } } random_list = { 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:confident } } save_scope_value_as = { name = ms_behaviour_2 value = flag:confident } } 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:eats_their_fill } } save_scope_value_as = { name = ms_behaviour_2 value = flag:eats_their_fill } } 33 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:talkative } } save_scope_value_as = { name = ms_behaviour_2 value = flag:talkative } } } } #Vagrant 100 = { trigger = { scope:ms_type = flag:vagrant } random_list = { 20 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:sneaks } } 20 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:leaves_early } } 20 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:earnest } } 20 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:confident } } 20 = { save_scope_value_as = { name = ms_behaviour_1 value = flag:talkative } } } random_list = { 20 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:sneaks } } save_scope_value_as = { name = ms_behaviour_2 value = flag:sneaks } } 20 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:leaves_early } } save_scope_value_as = { name = ms_behaviour_2 value = flag:leaves_early } } 20 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:earnest } } save_scope_value_as = { name = ms_behaviour_2 value = flag:earnest } } 20 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:confident } } save_scope_value_as = { name = ms_behaviour_2 value = flag:confident } } 20 = { trigger = { NOT = { scope:ms_behaviour_1 = flag:talkative } } save_scope_value_as = { name = ms_behaviour_2 value = flag:talkative } } } } } #And sometimes just remove an eye for funsies. random = { chance = 5 scope:stranger = { add_trait = one_eyed } } } #Ignore them: they're probably harmless. ##This leads to a standardised effect: something mildly beneficial/annoying, if the player is unsure or doesn't want to gamble much. option = { name = fp1_yearly.1001.a #Let the player know that something will happen. custom_tooltip = fp1_yearly.1001.probably_harmless.tt #Configure for standard effects. save_scope_value_as = { name = ms_effect value = flag:standard } #Figure out which follow-up event to send. fp1_mysterious_stranger_follow_up_event_picker_effect = yes stress_impact = { trusting = minor_stress_impact_loss gregarious = minor_stress_impact_loss paranoid = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = -0.5 ai_compassion = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = trusting } modifier = { #Weight up for stress. add = 10 has_trait = gregarious } modifier = { #Weight down for stress. add = -10 has_trait = paranoid } } } #Make them a guest of honour! ##This leads to a critical effect: we dial up the consequences, in case the player is certain they know who the stranger is/wants to risk it for a biscuit. option = { name = fp1_yearly.1001.b #Warn the player that they're signing up for a dramatic event. custom_tooltip = fp1_yearly.1001.guest_of_honour.tt #Configure for critical effects. save_scope_value_as = { name = ms_effect value = flag:critical } #Figure out which follow-up event to send. fp1_mysterious_stranger_follow_up_event_picker_effect = yes stress_impact = { trusting = medium_stress_impact_loss gregarious = medium_stress_impact_loss paranoid = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = -0.5 ai_compassion = -0.25 } modifier = { #Weight up for stress. add = 20 has_trait = trusting } modifier = { #Weight up for stress. add = 20 has_trait = gregarious } modifier = { #Weight down for stress. add = -20 has_trait = paranoid } } } #Give 'em the boot. ##Opt-out with mild consequence. option = { name = fp1_yearly.1001.c #The mysterious stranger vanishes. mysterious_stranger_disappears_effect = yes #Everyone thinks you're a bit mean-spirited, but that's it. if = { limit = { has_character_modifier = generous_host_fp1_modifier } remove_character_modifier = generous_host_fp1_modifier } else = { add_character_modifier = { modifier = stingy_host_fp1_modifier years = 5 } } stress_impact = { paranoid = minor_stress_impact_loss shy = medium_stress_impact_loss trusting = minor_stress_impact_gain gregarious = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.5 ai_compassion = 0.25 } modifier = { #Weight up for stress. add = 10 has_trait = paranoid } modifier = { #Weight up for stress. add = 20 has_trait = shy } modifier = { #Weight down for stress. add = -10 has_trait = trusting } modifier = { #Weight down for stress. add = -10 has_trait = gregarious } } } } scripted_trigger mysterious_stranger_godi_same_faith_trigger = { #Small enough that it probably doesn't need a trigger, but might need to be more complex in future. faith = scope:ms_faith } scripted_trigger mysterious_stranger_godi_same_religion_trigger = { NOT = { mysterious_stranger_godi_same_faith_trigger = yes } religion = scope:ms_faith.religion } scripted_effect mysterious_stranger_add_possible_converts_to_specific_list_effect = { random_in_list = { list = possible_converts_pool_list limit = { NOT = { is_in_list = possible_converts_specific_list } } weight = { base = 0 #Give a base percentage chance, scale down 2% per point of learning. modifier = { add = { value = 50 subtract = learning } } #Weight up assorted traits that make you more likely to believe the godi. modifier = { add = 5 has_trait = arbitrary } modifier = { add = 5 has_trait = fickle } modifier = { add = 10 has_trait = trusting } } add_to_list = possible_converts_specific_list } } scripted_effect mysterious_stranger_different_religion_convert_courtiers_effect = { #Firstly, nab all the courtiers who might be susceptible to conversion, excepting any who'd mess you up too much. every_courtier = { limit = { is_available_ai_adult = yes #We only want to look at people of root's faith. faith = root.faith NOR = { #Exclude the self-righteous. has_trait = zealous has_trait = faith_warrior has_trait = heresiarch has_trait = crusader_king #Aaaand exclude the actually-righteous. piety_level >= medium_piety_level #We also don't want council conversions, since that could make for some awkward chaplains. is_councillor_of = root #Filter out likely heirs, so that we don't mess up succession too much. is_primary_heir_of = root is_player_heir_of = root } } add_to_list = possible_converts_pool_list } #Nab specific courtiers for conversion. mysterious_stranger_add_possible_converts_to_specific_list_effect = yes mysterious_stranger_add_possible_converts_to_specific_list_effect = yes mysterious_stranger_add_possible_converts_to_specific_list_effect = yes #Nab even more if it's a a critical effect. if = { limit = { scope:ms_effect = flag:critical } mysterious_stranger_add_possible_converts_to_specific_list_effect = yes mysterious_stranger_add_possible_converts_to_specific_list_effect = yes mysterious_stranger_add_possible_converts_to_specific_list_effect = yes } } # Results: Godi. fp1_yearly.1011 = { type = character_event title = fp1_yearly.1011.t desc = { first_valid = { #Critical - separate religion. triggered_desc = { trigger = { scope:ms_effect = flag:critical NOR = { mysterious_stranger_godi_same_faith_trigger = yes mysterious_stranger_godi_same_religion_trigger = yes } } desc = fp1_yearly.1011.desc.separate_religion.critical } #Standard - separate religion. triggered_desc = { trigger = { scope:ms_effect = flag:standard NOR = { mysterious_stranger_godi_same_faith_trigger = yes mysterious_stranger_godi_same_religion_trigger = yes } } desc = fp1_yearly.1011.desc.separate_religion.standard } #Critical - same religion, separate faith. triggered_desc = { trigger = { scope:ms_effect = flag:critical mysterious_stranger_godi_same_religion_trigger = yes } desc = fp1_yearly.1011.desc.same_religion.critical } #Standard - same religion, separate faith. triggered_desc = { trigger = { scope:ms_effect = flag:standard mysterious_stranger_godi_same_religion_trigger = yes } desc = fp1_yearly.1011.desc.same_religion.standard } #Critical - same faith. triggered_desc = { trigger = { scope:ms_effect = flag:critical mysterious_stranger_godi_same_faith_trigger = yes } desc = fp1_yearly.1011.desc.same_faith.critical } #Standard - same faith (fallback). desc = fp1_yearly.1011.desc.same_faith.standard } } theme = intrigue left_portrait = { character = scope:stranger #The Godi respects fellow Germanic Pagans. triggered_animation = { trigger = { root = { OR = { mysterious_stranger_godi_same_faith_trigger = yes mysterious_stranger_godi_same_religion_trigger = yes } } } animation = personality_zealous } #Less so those outside their religion. triggered_animation = { trigger = { root = { NAND = { mysterious_stranger_godi_same_faith_trigger = yes mysterious_stranger_godi_same_religion_trigger = yes } } } animation = anger } } override_background = { reference = bedchamber } immediate = { scope:stranger = { #Boost education by a step. ##Ordered backwards so that they don't sequentially overwrite each other. if = { limit = { has_trait = education_learning_3 } hidden_effect = { remove_trait = education_learning_3 } add_trait = education_learning_4 } if = { limit = { has_trait = education_learning_2 } hidden_effect = { remove_trait = education_learning_2 } add_trait = education_learning_3 } if = { limit = { has_trait = education_learning_1 } hidden_effect = { remove_trait = education_learning_1 } add_trait = education_learning_2 } if = { limit = { has_trait = education_intrigue_3 } hidden_effect = { remove_trait = education_intrigue_3 } add_trait = education_intrigue_4 } if = { limit = { has_trait = education_intrigue_2 } hidden_effect = { remove_trait = education_intrigue_2 } add_trait = education_intrigue_3 } if = { limit = { has_trait = education_intrigue_1 } hidden_effect = { remove_trait = education_intrigue_1 } add_trait = education_intrigue_2 } #Boost stats. add_diplomacy_skill = { 5 10 } add_martial_skill = { 5 10 } add_stewardship_skill = { 3 8 } add_intrigue_skill = { 10 15 } add_learning_skill = { 10 15 } add_prowess_skill = { 5 10 } #Change faith. hidden_effect = { set_character_faith = scope:ms_faith } #Finally: give them an eye-patch, assuming they're going to impersonate Odin. And aren't already missing an eye. if = { limit = { religion = root.religion NOT = { has_trait = one_eyed } } add_character_flag = wears_fake_eye_patch } #Reveal the godi's true stats. hidden_effect = { force_character_skill_recalculation = yes } } #Organise a list of courtiers who might be affected for conversion. mysterious_stranger_different_religion_convert_courtiers_effect = yes #Godi is not even of your religion, giving negative effects. if = { limit = { NOR = { mysterious_stranger_godi_same_faith_trigger = yes mysterious_stranger_godi_same_religion_trigger = yes } } #If the godi is not of your religion, they convert a bunch of your courtiers. every_in_list = { list = possible_converts_specific_list custom = fp1_yearly.1011.possible_converts_specific_list set_character_faith = scope:ms_faith } #You also lose some piety, or realm priest opinion if appropriate. Amount depends on whether you endorsed the godi or not. if = { limit = { scope:ms_effect = flag:critical } if = { limit = { faith = { has_doctrine = doctrine_theocracy_lay_clergy } #Double-check that they actually have a realm priest at the moment. any_learning_councillor = { exists = this } } add_piety = medium_piety_loss every_learning_councillor = { add_opinion = { target = root modifier = fp1_honoured_heathen_opinion } } } else = { add_piety = major_piety_loss } } else = { add_piety = medium_piety_loss } } #Godi is of your religion, but not of your faith. else_if = { limit = { mysterious_stranger_godi_same_religion_trigger = yes } #Better piety gain if you endorsed them. if = { limit = { scope:ms_effect = flag:critical } add_piety = medium_piety_gain } else = { add_piety = minor_piety_gain } } #Otherwise, the godi is of your faith. else = { #As elsewhere, better piety gain if you endorsed them. if = { limit = { scope:ms_effect = flag:critical } add_piety = major_piety_gain } else = { add_piety = medium_piety_gain } } } #Surely that cannot *truly* have been the Allfather? [spoilers: it wasn't] option = { name = fp1_yearly.1011.a trigger = { OR = { mysterious_stranger_godi_same_faith_trigger = yes mysterious_stranger_godi_same_religion_trigger = yes } } #The godi vanishes. mysterious_stranger_disappears_effect = yes ai_chance = { #Only option. base = 100 } } #Bastard! option = { name = fp1_yearly.1011.b trigger = { NOR = { mysterious_stranger_godi_same_faith_trigger = yes mysterious_stranger_godi_same_religion_trigger = yes } } #The godi vanishes. mysterious_stranger_disappears_effect = yes ai_chance = { #Only option. base = 100 } } } # Results: Reformed Missionary. fp1_yearly.1012 = { type = character_event title = fp1_yearly.1012.t desc = { first_valid = { #Critical - different faith. triggered_desc = { trigger = { scope:ms_effect = flag:critical faith != scope:ms_faith } desc = fp1_yearly.1012.desc.different_faith.critical } #Standard - different faith. triggered_desc = { trigger = { scope:ms_effect = flag:standard faith != scope:ms_faith } desc = fp1_yearly.1012.desc.different_faith.standard } #Critical - same faith. triggered_desc = { trigger = { scope:ms_effect = flag:critical faith = scope:ms_faith } desc = fp1_yearly.1012.desc.same_faith.critical } #Standard - same faith (fallback). desc = fp1_yearly.1012.desc.same_faith.standard } } theme = intrigue left_portrait = { character = scope:stranger #The missionary is pleased if they share your faith. triggered_animation = { trigger = { root = { faith = scope:ms_faith } } animation = happiness } #Otherwise, they'll pray for you. triggered_animation = { trigger = { NOT = { root = { faith = scope:ms_faith } } } animation = personality_zealous } } override_background = { reference = bedchamber } immediate = { scope:stranger = { #Boost education by a step. ##Ordered backwards so that they don't sequentially overwrite each other. if = { limit = { has_trait = education_learning_3 } hidden_effect = { remove_trait = education_learning_3 } add_trait = education_learning_4 } if = { limit = { has_trait = education_learning_2 } hidden_effect = { remove_trait = education_learning_2 } add_trait = education_learning_3 } if = { limit = { has_trait = education_learning_1 } hidden_effect = { remove_trait = education_learning_1 } add_trait = education_learning_2 } #Boost stats. add_diplomacy_skill = { 5 10 } add_martial_skill = { 5 10 } add_stewardship_skill = { 3 8 } add_intrigue_skill = { 5 10 } add_learning_skill = { 10 15 } add_prowess_skill = { 5 10 } add_trait = theologian #Change faith. hidden_effect = { set_character_faith = scope:ms_faith } #If scope:stranger's faith allows monks, make them a monk. if = { limit = { faith = { has_doctrine_parameter = take_vows_active } } add_trait = devoted #Huahua! Don't you see, they were wearing a toupee the whole time! } #Reveal the missionary's true stats. hidden_effect = { force_character_skill_recalculation = yes } } #Organise a list of courtiers who might be affected for conversion. mysterious_stranger_different_religion_convert_courtiers_effect = yes #The missionary does not share your faith. if = { limit = { faith != scope:ms_faith } #They convert a bunch of your courtiers. every_in_list = { list = possible_converts_specific_list custom = fp1_yearly.1012.possible_converts_specific_list set_character_faith = scope:ms_faith } #You also lose some piety, or realm priest opinion if appropriate. Amount depends on whether you endorsed the missionary or not. if = { limit = { scope:ms_effect = flag:critical } if = { limit = { faith = { has_doctrine = doctrine_theocracy_lay_clergy } #Double-check that they actually have a realm priest at the moment. any_learning_councillor = { exists = this } } add_piety = medium_piety_loss every_learning_councillor = { add_opinion = { target = root modifier = fp1_honoured_heathen_opinion } } } else = { add_piety = major_piety_loss } } else = { add_piety = medium_piety_loss } } #Otherwise, the missionary has the same faith as you. else = { #If endorsed, they offers you a hook on & opinion with your realm priest (assuming such is valid). if = { limit = { scope:ms_effect = flag:critical faith = { has_doctrine = doctrine_theocracy_lay_clergy } #Double-check that you actually have a realm priest, and that a weak hook can be added. any_learning_councillor = { exists = this save_temporary_scope_as = learning_councillor root = { can_add_hook = { type = favor_hook target = scope:learning_councillor } } } } random_learning_councillor = { limit = { can_add_hook = { type = favor_hook target = root } } save_temporary_scope_as = learning_councillor root = { add_hook = { type = favor_hook target = scope:learning_councillor } } add_opinion = { target = root modifier = impressed_opinion opinion = 30 } } add_piety = medium_piety_gain } #Otherwise, they just offers you more piety when endorsed. else_if = { limit = { scope:ms_effect = flag:critical } add_piety = major_piety_gain } #Otherwise, you just get a bit of piety. else = { add_piety = medium_piety_gain } } } #Different faith: they offer to convert you, you accept. option = { name = fp1_yearly.1012.a trigger = { faith != scope:ms_faith #Block the AI from making stupid conversions. OR = { is_ai = no AND = { scope:ms_faith.fervor >= 30 OR = { AND = { faith.fervor <= 25 has_trait = cynical } AND = { faith.fervor <= 15 NOT = { has_trait = zealous } } faith.fervor <= 5 } } } } #Perform the conversion. set_character_faith_with_conversion = scope:ms_faith #Recoup lost piety, and get paid a little extra. custom_tooltip = fp1_yearly.1012.a.recoup_lost_piety.tt hidden_effect = { if = { limit = { scope:ms_effect = flag:critical } add_piety_no_experience = major_piety_gain #^Technically, you gain a little extra here if you have a theocratic faith, but adding another scripted trigger in just these two spots would make the event very hard to read. } else = { add_piety_no_experience = medium_piety_gain } } if = { limit = { scope:ms_effect = flag:critical } add_piety = medium_piety_gain } else = { add_piety = minor_piety_gain } stress_impact = { cynical = minor_stress_impact_loss zealous = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = -0.5 } modifier = { #Weight up for stress. add = 10 has_trait = cynical } modifier = { #Weight down for stress. add = -30 has_trait = zealous } } } #Different faith: they offer to convert you, you turn them down, they leave. option = { name = fp1_yearly.1012.b trigger = { faith != scope:ms_faith } #The missionary vanishes. mysterious_stranger_disappears_effect = yes stress_impact = { forgiving = minor_stress_impact_loss cynical = minor_stress_impact_loss vengeful = minor_stress_impact_gain zealous = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = -0.5 ai_vengefulness = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = forgiving } modifier = { #Weight up for stress. add = 10 has_trait = cynical } modifier = { #Weight down for stress. add = -10 has_trait = vengeful } modifier = { #Weight down for stress. add = -10 has_trait = zealous } } } #Different faith: they offer to convert you, you have them tossed in the dungeon. option = { name = fp1_yearly.1012.c trigger = { faith != scope:ms_faith } imprison = { target = scope:stranger type = dungeon } stress_impact = { vengeful = minor_stress_impact_loss zealous = medium_stress_impact_loss forgiving = minor_stress_impact_gain cynical = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.25 ai_vengefulness = 0.5 } modifier = { #Weight up for stress. add = 10 has_trait = vengeful } modifier = { #Weight up for stress. add = 20 has_trait = zealous } modifier = { #Weight down for stress. add = -10 has_trait = forgiving } modifier = { #Weight down for stress. add = -20 has_trait = cynical } } } #Same faith: offers to stay, you accept. option = { name = fp1_yearly.1012.d trigger = { faith = scope:ms_faith } #Add the (rather chuffed) courtier to your court. add_courtier = scope:stranger reverse_add_opinion = { target = scope:stranger modifier = pleased_opinion opinion = 30 } stress_impact = { trusting = minor_stress_impact_loss gregarious = minor_stress_impact_loss paranoid = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.5 ai_zeal = 0.25 } modifier = { #Weight up for stress. add = 10 has_trait = trusting } modifier = { #Weight up for stress. add = 10 has_trait = gregarious } modifier = { #Weight down for stress. add = -10 has_trait = paranoid } } } #Same faith: offers to stay, you decline. option = { name = fp1_yearly.1012.e trigger = { faith = scope:ms_faith} #The missionary vanishes. mysterious_stranger_disappears_effect = yes stress_impact = { paranoid = medium_stress_impact_loss gregarious = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = -0.25 ai_rationality = -0.25 } modifier = { #Weight up for stress. add = 20 has_trait = paranoid } modifier = { #Weight down for stress. add = -10 has_trait = gregarious } } } } # Results: Nithing. fp1_yearly.1013 = { type = character_event title = fp1_yearly.1013.t desc = { first_valid = { triggered_desc = { trigger = { scope:ms_effect = flag:critical } desc = fp1_yearly.1013.desc.critical } desc = fp1_yearly.1013.desc.standard } first_valid = { triggered_desc = { trigger = { scope:stranger = { has_trait = sodomite } } desc = fp1_yearly.1013.desc.outro.sodomite } desc = fp1_yearly.1013.desc.outro } } theme = intrigue left_portrait = { character = scope:stranger triggered_animation = { trigger = { scope:stranger = { has_trait = sodomite } } animation = stress } triggered_animation = { trigger = { NOT = { scope:stranger = { has_trait = sodomite } } } animation = schadenfreude } } override_background = { reference = study } immediate = { scope:stranger = { #Boost education by two steps. if = { limit = { has_trait = education_martial_1 } hidden_effect = { remove_trait = education_martial_1 } add_trait = education_martial_3 } if = { limit = { has_trait = education_intrigue_1 } hidden_effect = { remove_trait = education_intrigue_1 } add_trait = education_intrigue_3 } #Boost stats. add_diplomacy_skill = { 3 5 } add_martial_skill = { 8 12 } add_stewardship_skill = { 3 5 } add_intrigue_skill = { 8 12 } add_learning_skill = { 3 5 } add_prowess_skill = { 5 10 } #Add nithing things. nithing_character_creation_scripted_effect = yes #Give them a suitable crime. random_list = { 65 = { add_trait = murderer } 25 = { trigger = { faith = { has_doctrine_parameter = witchcraft_illegal } } add_trait = witch } 10 = { trigger = { is_male = yes faith = { has_doctrine = doctrine_homosexuality_crime } } add_trait = sodomite } } #Reveal the nithing's true stats. hidden_effect = { force_character_skill_recalculation = yes } } #The nithing robs you, with a harsher effect if you endorsed them! if = { limit = { scope:ms_effect = flag:critical } save_scope_value_as = { name = nithing_stolen_loot value = massive_gold_value } } else = { save_scope_value_as = { name = nithing_stolen_loot value = major_gold_value } } remove_short_term_gold = scope:nithing_stolen_loot } #Curses! option = { name = { trigger = { NOT = { scope:stranger = { has_trait = sodomite } } } text = fp1_yearly.1013.a } name = { trigger = { scope:stranger = { has_trait = sodomite } } text = fp1_yearly.1013.a.sodomite } #The nithing vanishes. mysterious_stranger_disappears_effect = yes #No stress: the player has just eaten a nasty result. ai_chance = { #Only option. base = 100 } } #I will not rest till that nithing is found! (rage outlet for angry players) option = { name = fp1_yearly.1013.b trigger = { is_ai = no } #Make the nithing a wanted individual. scope:stranger = { #The nithing runs for it. hidden_effect = { move_to_pool = yes # And give them their ill-gotten earnings. ## We do this here so that their dying doesn't just give you or anyone else the cash back otherwise. add_gold = scope:nithing_stolen_loot } #But they've made a powerful enemy! set_relation_rival = { target = root reason = rival_nithing } } stress_impact = { #Minor penalty for RP reasons: we've already given the player a hefty negative, no need to pile on. forgiving = minor_stress_impact_loss vengeful = major_stress_impact_loss } ai_chance = { #Irrelevant option. base = 100 } } } # Results: Warrior. fp1_yearly.1014 = { type = character_event title = fp1_yearly.1014.t desc = { first_valid = { triggered_desc = { trigger = { scope:ms_effect = flag:critical } desc = fp1_yearly.1014.desc.critical } desc = fp1_yearly.1014.desc.standard } desc = fp1_yearly.1014.desc.outro } theme = intrigue left_portrait = { character = scope:stranger animation = personality_bold } override_background = { reference = corridor_night } immediate = { #If they were endorsed, the warrior gets better stats than they would otherwise. if = { limit = { scope:ms_effect = flag:critical } scope:stranger = { #Boost education by two steps. if = { limit = { has_trait = education_martial_1 } hidden_effect = { remove_trait = education_martial_1 } add_trait = education_martial_3 } if = { limit = { has_trait = education_intrigue_1 } hidden_effect = { remove_trait = education_intrigue_1 } add_trait = education_intrigue_3 } #Boost stats. add_diplomacy_skill = { 3 5 } add_martial_skill = { 10 12 } add_stewardship_skill = { 3 5 } add_intrigue_skill = { 3 5 } add_learning_skill = { 3 5 } add_prowess_skill = { 14 18 } #Give him a reputation. add_prestige_level = 2 #Slight chance to add an additional trait or two. random_list = { 25 = { trigger = { exists = title:e_byzantium.holder } add_trait = varangian } 25 = { add_trait = berserker } 25 = { add_trait = physique_good_2 } 25 = { add_trait = lifestyle_blademaster add_trait_xp = { trait = lifestyle_blademaster value = { integer_range = { min = medium_lifestyle_random_xp_low max = medium_lifestyle_random_xp_high } } } } } #Reveal the warrior's true stats. hidden_effect = { force_character_skill_recalculation = yes } } } else = { scope:stranger = { #Boost education by one step. if = { limit = { has_trait = education_martial_1 } hidden_effect = { remove_trait = education_martial_1 } add_trait = education_martial_2 } if = { limit = { has_trait = education_intrigue_1 } hidden_effect = { remove_trait = education_intrigue_1 } add_trait = education_intrigue_2 } #Boost stats. add_diplomacy_skill = { 3 5 } add_martial_skill = { 5 10 } add_stewardship_skill = { 3 5 } add_intrigue_skill = { 3 5 } add_learning_skill = { 3 5 } add_prowess_skill = { 8 12 } #Slight chance to add an additional trait or two. random_list = { 50 = {} 12 = { trigger = { exists = title:e_byzantium.holder } add_trait = varangian } 12 = { add_trait = berserker } 12 = { add_trait = physique_good_1 } 14 = { add_trait = lifestyle_blademaster add_trait_xp = { trait = lifestyle_blademaster value = { integer_range = { min = small_lifestyle_random_xp_low max = small_lifestyle_random_xp_high } } } } } #Reveal the warrior's true stats. hidden_effect = { force_character_skill_recalculation = yes } } } } #I'll certainly hire you! option = { name = fp1_yearly.1014.a #Gain the warrior, who is also pretty happy to be here. add_courtier = scope:stranger reverse_add_opinion = { target = scope:stranger modifier = loyal_servant } #And pay the price. if = { limit = { scope:ms_effect = flag:critical } remove_short_term_gold = medium_gold_value } else = { remove_short_term_gold = minor_gold_value } stress_impact = { gregarious = minor_stress_impact_loss greedy = medium_stress_impact_gain } ai_chance = { #Always a no if the AI can't afford the warrior. base = -1000 ai_value_modifier = { ai_sociability = 0.5 ai_greed = -0.5 } #Enable option for the AI if they've the gold to spare. modifier = { add = 1000 scope:ms_effect = flag:critical short_term_gold >= medium_gold_value } modifier = { add = 1000 scope:ms_effect = flag:standard short_term_gold >= minor_gold_value } modifier = { #Weight up for stress. add = 10 has_trait = gregarious } modifier = { #Weight down for stress. add = -20 has_trait = greedy } } } #Pass. Move along, Conan. option = { name = fp1_yearly.1014.b #The warrior vanishes. mysterious_stranger_disappears_effect = yes #Have some mild consolation prestige add_prestige = minor_prestige_gain stress_impact = { greedy = minor_stress_impact_loss gregarious = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_greed = 0.5 ai_sociability = -0.5 } modifier = { #Weight up for stress. add = 10 has_trait = greedy } modifier = { #Weight down for stress. add = -10 has_trait = gregarious } } } } # Results: Vagrant. fp1_yearly.1015 = { type = character_event title = fp1_yearly.1015.t desc = { first_valid = { triggered_desc = { trigger = { scope:ms_effect = flag:critical } desc = fp1_yearly.1015.desc.critical } desc = fp1_yearly.1015.desc.standard } desc = fp1_yearly.1015.desc.outro } theme = intrigue #The vagrant's reaction varies a bit depending on your treatment of them. left_portrait = { character = scope:stranger triggered_animation = { trigger = { scope:ms_effect = flag:critical } animation = ecstasy } triggered_animation = { trigger = { scope:ms_effect = flag:standard } animation = happiness } } override_background = { reference = corridor_night } immediate = { #Vagrants get no stat reveal, as they genuinely suck. #Lose a bit of prestige for letting them hang around so long, losing more if you endorsed them. if = { limit = { scope:ms_effect = flag:critical } add_prestige = medium_prestige_loss } else = { add_prestige = minor_prestige_loss } } #Eh, I guess you can stay here. option = { name = fp1_yearly.1015.a #You gain the vagrant as a courtier add_courtier = scope:stranger #And a hook on them: weak if you didn't endorse them, strong if you did. if = { limit = { scope:ms_effect = flag:critical } add_hook = { type = loyalty_hook target = scope:stranger } } else = { add_hook = { type = favor_hook target = scope:stranger years = 50 #You did literally scoop them up off the streets. They won't soon forget that. } } #Either way, they think more of you for it. reverse_add_opinion = { target = scope:stranger modifier = loyal_servant } stress_impact = { gregarious = minor_stress_impact_loss humble = medium_stress_impact_loss shy = minor_stress_impact_gain arrogant = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.5 ai_compassion = 0.25 } modifier = { #Weight up for stress. add = 10 has_trait = gregarious } modifier = { #Weight up for stress. add = 20 has_trait = humble } modifier = { #Weight down for stress. add = -10 has_trait = shy } modifier = { #Weight down for stress. add = -20 has_trait = arrogant } } } #What?! Get out! option = { name = fp1_yearly.1015.b #The vagrant vanishes. mysterious_stranger_disappears_effect = yes stress_impact = { shy = minor_stress_impact_loss arrogant = medium_stress_impact_loss gregarious = minor_stress_impact_gain humble = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = -0.5 ai_compassion = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = shy } modifier = { #Weight up for stress. add = 20 has_trait = arrogant } modifier = { #Weight down for stress. add = -10 has_trait = gregarious } modifier = { #Weight down for stress. add = -20 has_trait = humble } } } } # Big RIP to fp1_yearly.1031 through fp1_yearly.1061: it would have been the greatest and bestest event chain ever, but alas, it has been cut, and now no one shall know of its grandeur. It was too beautiful for this world. ################################################## # Commissioning a Longship for a Funeral # by Ewan Cowhig Croft # 1061 - 1070 ################################################## scripted_trigger fp1_funeral_longship_generic_mourner_trigger = { is_landed = yes is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_1062 } faith = root.faith NOR = { any_relation = { type = rival this = root } AND = { is_ai = yes opinion = { target = root value >= low_negative_opinion } } } } scripted_trigger fp1_funeral_longship_likes_parties = { has_trait = lifestyle_reveler has_trait_xp = { trait = lifestyle_reveler value >= 100 } # Faith must not consider this a bad thing. faith = { NOT = { trait_is_virtue = shy } } } scripted_trigger fp1_funeral_longship_likes_duels = { has_trait = lifestyle_blademaster has_trait_xp = { trait = lifestyle_blademaster value >= 100 } # Faith must not consider this a bad thing. faith = { NOT = { has_doctrine_parameter = holy_wars_forbidden } } } scripted_trigger fp1_funeral_longship_likes_hunting = { hunt_lifestyle_track_greater_equal_trigger = { TRACK = hunter GREATER_EQUAL = 100 } # Faith must not consider this a bad thing. faith = { NOT = { has_doctrine_parameter = holy_wars_forbidden } } } scripted_trigger fp1_funeral_longship_likes_magic = { has_trait = lifestyle_mystic has_trait_xp = { trait = lifestyle_mystic value >= 100 } # Faith must consider this an actively good thing (since Norse paganism's complicated relationship with witchcraft _tended_ towards the negative). faith = { has_doctrine_parameter = witchcraft_accepted } } # The family member is earmarked. fp1_yearly.1061 = { hidden = yes trigger = { # DLC check. has_fp1_dlc_trigger = yes # Germanic faith. religion = religion:germanic_religion # Shouldn't ever happen, but just in case, exempt sky burials so that the character is never buried twice. NOT = { faith = { has_doctrine_parameter = sky_burials_active } } # And we shouldn't really be erecting glorious mounds to long lives that were actually cut short too early. age >= 30 # Must be significant in some way. OR = { highest_held_title_tier >= tier_duchy piety_level >= high_prestige_level prestige_level >= high_piety_level # Monarch of Parties. fp1_funeral_longship_likes_parties = yes # Monarch of Duels. fp1_funeral_longship_likes_duels = yes # Monarch of Hunting. fp1_funeral_longship_likes_hunting = yes # Monarch of Magic. fp1_funeral_longship_likes_magic = yes } # With a landed player heir of at least duchy tier, or close family, a soulmate, or best friend who's the same. OR = { player_heir ?= { fp1_funeral_longship_generic_mourner_trigger = yes } any_close_family_member = { fp1_funeral_longship_generic_mourner_trigger = yes } any_relation = { type = soulmate fp1_funeral_longship_generic_mourner_trigger = yes } any_relation = { type = best_friend fp1_funeral_longship_generic_mourner_trigger = yes } } } immediate = { save_scope_as = ship_funeral_candidate # Determine why they were a big deal. ## First check their title tier. if = { limit = { highest_held_title_tier = tier_duchy } save_scope_value_as = { name = reason_title value = flag:duchy } } else_if = { limit = { highest_held_title_tier = tier_kingdom } save_scope_value_as = { name = reason_title value = flag:kingdom } } else_if = { limit = { highest_held_title_tier = tier_empire } save_scope_value_as = { name = reason_title value = flag:empire } } ## Then look at their prestige/piety levels. if = { limit = { prestige_level = high_prestige_level } save_scope_value_as = { name = reason_prestige value = flag:high } } else_if = { limit = { prestige_level = very_high_prestige_level } save_scope_value_as = { name = reason_prestige value = flag:very_high } } else_if = { limit = { prestige_level >= max_prestige_level } save_scope_value_as = { name = reason_prestige value = flag:max } } if = { limit = { prestige_level = high_prestige_level } save_scope_value_as = { name = reason_piety value = flag:high } } else_if = { limit = { prestige_level = very_high_prestige_level } save_scope_value_as = { name = reason_piety value = flag:very_high } } else_if = { limit = { prestige_level >= max_prestige_level } save_scope_value_as = { name = reason_piety value = flag:max } } ## And finally their aptness at certain lifestyles. ### Partying. if = { limit = { fp1_funeral_longship_likes_parties = yes } save_scope_value_as = { name = reason_lifestyle_partying value = yes } } ### Hunting. if = { limit = { fp1_funeral_longship_likes_duels = yes } save_scope_value_as = { name = reason_lifestyle_duelling value = yes } } ### Duels. if = { limit = { fp1_funeral_longship_likes_hunting = yes } save_scope_value_as = { name = reason_lifestyle_hunting value = yes } } ### Magic. if = { limit = { fp1_funeral_longship_likes_magic = yes } save_scope_value_as = { name = reason_lifestyle_magickerationing value = yes } } # Next, determine who gets to hold the funeral. ## First, we compile a list. if = { limit = { player_heir ?= { fp1_funeral_longship_generic_mourner_trigger = yes } } player_heir = { add_to_list = potential_mourners_list } } every_close_family_member = { limit = { fp1_funeral_longship_generic_mourner_trigger = yes } add_to_list = potential_mourners_list } every_relation = { type = soulmate limit = { fp1_funeral_longship_generic_mourner_trigger = yes } add_to_list = potential_mourners_list } every_relation = { type = best_friend limit = { fp1_funeral_longship_generic_mourner_trigger = yes } add_to_list = potential_mourners_list } ## Then, we grab the person in the list with the most direct connection, preferring player heirs, levelled relationships, then close family, in that order. Players get a generic boost up this list. ordered_in_list = { list = potential_mourners_list order_by = { value = fp1_funeral_longship_preferred_mourner_value } save_scope_as = mourner } # Finally, fire an event for scope:mourner to inform them that a ship burial is available. if = { limit = { exists = scope:mourner } scope:mourner = { # Set the used character flag here rather than later, so that scope:mourner doesn't queue up multiple ship funerals due to a wave of sudden bereavements. add_character_flag = { flag = had_event_fp1_yearly_1062 days = 7300 } trigger_event = { id = fp1_yearly.1062 months = 2 } } } } } # Inform scope:mourner of a valid ship burial. fp1_yearly.1062 = { type = character_event title = fp1_yearly.1062.t desc = fp1_yearly.1062.desc theme = death left_portrait = { character = scope:mourner animation = sadness } right_portrait = { character = scope:ship_funeral_candidate animation = personality_zealous } override_background = { reference = temple } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes # Must still be the same faith as scope:ship_funeral_candidate, for ease of loc and such. faith = scope:ship_funeral_candidate.faith } # A small stone ship. option = { name = fp1_yearly.1062.a trigger = { can_make_expensive_purchase_trigger = { PRICE = medium_gold_value } } # Remove the appropriate amount of coin. set_variable = { name = ship_burial_reimbursement value = medium_gold_value } remove_short_term_gold = medium_gold_value # Set up the ship burial type scope. save_scope_value_as = { name = burial_type value = flag:stone_small } # Inform & trigger next event. custom_tooltip = fp1_yearly.1062.a.tt trigger_event = { id = fp1_yearly.1063 months = 2 } stress_impact = { generous = minor_stress_impact_loss greedy = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.25 ai_greed = -0.25 ai_boldness = -0.25 } modifier = { # Weight up for stress. add = 10 has_trait = generous } modifier = { # Weight down for stress. add = -10 has_trait = greedy } } } # A grand stone ship. option = { name = fp1_yearly.1062.b trigger = { can_make_expensive_purchase_trigger = { PRICE = major_gold_value } } # Remove the appropriate amount of coin. set_variable = { name = ship_burial_reimbursement value = major_gold_value } remove_short_term_gold = major_gold_value # Set up the ship burial type scope. save_scope_value_as = { name = burial_type value = flag:stone_grand } # Inform & trigger next event. custom_tooltip = fp1_yearly.1062.a.tt trigger_event = { id = fp1_yearly.1063 months = 2 } stress_impact = { generous = medium_stress_impact_loss greedy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.25 ai_boldness = 0.25 ai_zeal = 0.25 ai_greed = -0.25 } modifier = { # Weight up for stress. add = 20 has_trait = generous } modifier = { # Weight down for stress. add = -20 has_trait = greedy } } } # An purpose-built ornate grave ship. option = { name = fp1_yearly.1062.c trigger = { can_make_expensive_purchase_trigger = { PRICE = massive_gold_value } } # Remove the appropriate amount of coin. set_variable = { name = ship_burial_reimbursement value = massive_gold_value } remove_treasury_or_gold = massive_treasury_or_gold_value # Set up the ship burial type scope. save_scope_value_as = { name = burial_type value = flag:wooden_ornate } # Inform & trigger next event. custom_tooltip = fp1_yearly.1062.a.tt trigger_event = { id = fp1_yearly.1063 months = 2 } stress_impact = { generous = major_stress_impact_loss greedy = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_zeal = 0.5 ai_greed = -0.75 } modifier = { # Weight up for stress. add = 30 has_trait = generous } modifier = { # Weight down for stress. add = -30 has_trait = greedy } } } # This is all *outrageously* expensive. option = { name = fp1_yearly.1062.d # Lose prestige if you're related to scope:ship_funeral_candidate. if = { limit = { OR = { scope:ship_funeral_candidate.dynasty = scope:mourner.dynasty scope:ship_funeral_candidate = { is_close_family_of = scope:mourner } } } add_prestige = medium_prestige_loss stress_impact = { greedy = medium_stress_impact_loss generous = medium_stress_impact_gain } } # Else, take a stress hit. else = { stress_impact = { base = medium_stress_gain greedy = medium_stress_impact_loss generous = medium_stress_impact_gain } } # Stress_impact handled in above if statements. ai_chance = { base = 100 ai_value_modifier = { ai_greed = 0.5 ai_boldness = -0.25 ai_zeal = -0.25 } modifier = { # Weight up for stress. add = 20 has_trait = greedy } modifier = { # Weight down for stress. add = -20 has_trait = generous } } } } scripted_effect fp1_funeral_longship_clear_variables_effect = { remove_variable = candidate_achievement_count remove_variable = ship_burial_reimbursement } fp1_yearly.1063 = { type = character_event title = fp1_yearly.1063.t desc = { desc = fp1_yearly.1063.desc.intro # Notable features of scop:ship_burial_candidate block. ## Single achievement. triggered_desc = { trigger = { var:candidate_achievement_count = 1 } desc = { desc = fp1_yearly.1063.desc.achievements.single.intro first_valid = { # Title tier. triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:duchy } desc = fp1_yearly.1063.desc.achievements.title.duchy } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:kingdom } desc = fp1_yearly.1063.desc.achievements.title.kingdom } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:empire } desc = fp1_yearly.1063.desc.achievements.title.empire } # Prestige level. triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:high } desc = fp1_yearly.1063.desc.achievements.prestige.high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:very_high } desc = fp1_yearly.1063.desc.achievements.prestige.very_high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:max } desc = fp1_yearly.1063.desc.achievements.prestige.max } # Piety level. triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:high } desc = fp1_yearly.1063.desc.achievements.piety.high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:very_high } desc = fp1_yearly.1063.desc.achievements.piety.very_high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:max } desc = fp1_yearly.1063.desc.achievements.piety.max } # Lifestyles. triggered_desc = { trigger = { exists = scope:reason_lifestyle_partying } desc = fp1_yearly.1063.desc.achievements.lifestyles.partying } triggered_desc = { trigger = { exists = scope:reason_lifestyle_duelling } desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling } triggered_desc = { trigger = { exists = scope:reason_lifestyle_hunting } desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting } triggered_desc = { trigger = { exists = scope:reason_lifestyle_magickerationing } desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing } } desc = fp1_yearly.1063.desc.achievements.single.outro } } ## Two achievements. triggered_desc = { trigger = { var:candidate_achievement_count = 2 } desc = { desc = fp1_yearly.1063.desc.achievements.double.intro first_valid = { # Title tier. triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:duchy } desc = fp1_yearly.1063.desc.achievements.title.duchy } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:kingdom } desc = fp1_yearly.1063.desc.achievements.title.kingdom } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:empire } desc = fp1_yearly.1063.desc.achievements.title.empire } # Prestige level. triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:high } desc = fp1_yearly.1063.desc.achievements.prestige.high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:very_high } desc = fp1_yearly.1063.desc.achievements.prestige.very_high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:max } desc = fp1_yearly.1063.desc.achievements.prestige.max } # Piety level. triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:high } desc = fp1_yearly.1063.desc.achievements.piety.high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:very_high } desc = fp1_yearly.1063.desc.achievements.piety.very_high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:max } desc = fp1_yearly.1063.desc.achievements.piety.max } # Lifestyles. triggered_desc = { trigger = { exists = scope:reason_lifestyle_partying } desc = fp1_yearly.1063.desc.achievements.lifestyles.partying } triggered_desc = { trigger = { exists = scope:reason_lifestyle_duelling } desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling } triggered_desc = { trigger = { exists = scope:reason_lifestyle_hunting } desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting } triggered_desc = { trigger = { exists = scope:reason_lifestyle_magickerationing } desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing } } desc = fp1_yearly.1063.desc.achievements.double.connector first_valid = { # Title tier. triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:duchy NOT = { scope:primary_reason = flag:reason_title } } desc = fp1_yearly.1063.desc.achievements.title.duchy } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:kingdom NOT = { scope:primary_reason = flag:reason_title } } desc = fp1_yearly.1063.desc.achievements.title.kingdom } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:empire NOT = { scope:primary_reason = flag:reason_title } } desc = fp1_yearly.1063.desc.achievements.title.empire } # Prestige level. triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:high NOT = { scope:primary_reason = flag:reason_prestige } } desc = fp1_yearly.1063.desc.achievements.prestige.high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:very_high NOT = { scope:primary_reason = flag:reason_prestige } } desc = fp1_yearly.1063.desc.achievements.prestige.very_high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:max NOT = { scope:primary_reason = flag:reason_prestige } } desc = fp1_yearly.1063.desc.achievements.prestige.max } # Piety level. triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:high NOT = { scope:primary_reason = flag:reason_piety } } desc = fp1_yearly.1063.desc.achievements.piety.high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:very_high NOT = { scope:primary_reason = flag:reason_piety } } desc = fp1_yearly.1063.desc.achievements.piety.very_high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:max NOT = { scope:primary_reason = flag:reason_piety } } desc = fp1_yearly.1063.desc.achievements.piety.max } # Lifestyles. triggered_desc = { trigger = { exists = scope:reason_lifestyle_partying NOT = { scope:primary_reason = flag:reason_partying } } desc = fp1_yearly.1063.desc.achievements.lifestyles.partying } triggered_desc = { trigger = { exists = scope:reason_lifestyle_duelling NOT = { scope:primary_reason = flag:reason_duelling } } desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling } triggered_desc = { trigger = { exists = scope:reason_lifestyle_hunting NOT = { scope:primary_reason = flag:reason_hunting } } desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting } triggered_desc = { trigger = { exists = scope:reason_lifestyle_magickerationing NOT = { scope:primary_reason = flag:reason_magickerationing } } desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing } } desc = fp1_yearly.1063.desc.achievements.double.outro } } ## Three or more achievements. triggered_desc = { trigger = { var:candidate_achievement_count >= 3 } desc = { desc = fp1_yearly.1063.desc.achievements.triple.intro first_valid = { # Title tier. triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:duchy } desc = fp1_yearly.1063.desc.achievements.title.duchy } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:kingdom } desc = fp1_yearly.1063.desc.achievements.title.kingdom } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:empire } desc = fp1_yearly.1063.desc.achievements.title.empire } # Prestige level. triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:high } desc = fp1_yearly.1063.desc.achievements.prestige.high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:very_high } desc = fp1_yearly.1063.desc.achievements.prestige.very_high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:max } desc = fp1_yearly.1063.desc.achievements.prestige.max } # Piety level. triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:high } desc = fp1_yearly.1063.desc.achievements.piety.high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:very_high } desc = fp1_yearly.1063.desc.achievements.piety.very_high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:max } desc = fp1_yearly.1063.desc.achievements.piety.max } # Lifestyles. triggered_desc = { trigger = { exists = scope:reason_lifestyle_partying } desc = fp1_yearly.1063.desc.achievements.lifestyles.partying } triggered_desc = { trigger = { exists = scope:reason_lifestyle_duelling } desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling } triggered_desc = { trigger = { exists = scope:reason_lifestyle_hunting } desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting } triggered_desc = { trigger = { exists = scope:reason_lifestyle_magickerationing } desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing } } first_valid = { # Title tier. triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:duchy NOT = { scope:primary_reason = flag:reason_title } } desc = fp1_yearly.1063.desc.achievements.title.duchy } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:kingdom NOT = { scope:primary_reason = flag:reason_title } } desc = fp1_yearly.1063.desc.achievements.title.kingdom } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:empire NOT = { scope:primary_reason = flag:reason_title } } desc = fp1_yearly.1063.desc.achievements.title.empire } # Prestige level. triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:high NOT = { scope:primary_reason = flag:reason_prestige } } desc = fp1_yearly.1063.desc.achievements.prestige.high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:very_high NOT = { scope:primary_reason = flag:reason_prestige } } desc = fp1_yearly.1063.desc.achievements.prestige.very_high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:max NOT = { scope:primary_reason = flag:reason_prestige } } desc = fp1_yearly.1063.desc.achievements.prestige.max } # Piety level. triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:high NOT = { scope:primary_reason = flag:reason_piety } } desc = fp1_yearly.1063.desc.achievements.piety.high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:very_high NOT = { scope:primary_reason = flag:reason_piety } } desc = fp1_yearly.1063.desc.achievements.piety.very_high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:max NOT = { scope:primary_reason = flag:reason_piety } } desc = fp1_yearly.1063.desc.achievements.piety.max } # Lifestyles. triggered_desc = { trigger = { exists = scope:reason_lifestyle_partying NOT = { scope:primary_reason = flag:reason_partying } } desc = fp1_yearly.1063.desc.achievements.lifestyles.partying } triggered_desc = { trigger = { exists = scope:reason_lifestyle_duelling NOT = { scope:primary_reason = flag:reason_duelling } } desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling } triggered_desc = { trigger = { exists = scope:reason_lifestyle_hunting NOT = { scope:primary_reason = flag:reason_hunting } } desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting } triggered_desc = { trigger = { exists = scope:reason_lifestyle_magickerationing NOT = { scope:primary_reason = flag:reason_magickerationing } } desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing } } desc = fp1_yearly.1063.desc.achievements.triple.connector first_valid = { # Title tier. triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:duchy NOR = { scope:primary_reason = flag:reason_title scope:secondary_reason = flag:reason_title } } desc = fp1_yearly.1063.desc.achievements.title.duchy } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:kingdom NOR = { scope:primary_reason = flag:reason_title scope:secondary_reason = flag:reason_title } } desc = fp1_yearly.1063.desc.achievements.title.kingdom } triggered_desc = { trigger = { exists = scope:reason_title scope:reason_title = flag:empire NOR = { scope:primary_reason = flag:reason_title scope:secondary_reason = flag:reason_title } } desc = fp1_yearly.1063.desc.achievements.title.empire } # Prestige level. triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:high NOR = { scope:primary_reason = flag:reason_prestige scope:secondary_reason = flag:reason_prestige } } desc = fp1_yearly.1063.desc.achievements.prestige.high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:very_high NOR = { scope:primary_reason = flag:reason_prestige scope:secondary_reason = flag:reason_prestige } } desc = fp1_yearly.1063.desc.achievements.prestige.very_high } triggered_desc = { trigger = { exists = scope:reason_prestige scope:reason_prestige = flag:max NOR = { scope:primary_reason = flag:reason_prestige scope:secondary_reason = flag:reason_prestige } } desc = fp1_yearly.1063.desc.achievements.prestige.max } # Piety level. triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:high NOR = { scope:primary_reason = flag:reason_piety scope:secondary_reason = flag:reason_piety } } desc = fp1_yearly.1063.desc.achievements.piety.high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:very_high NOR = { scope:primary_reason = flag:reason_piety scope:secondary_reason = flag:reason_piety } } desc = fp1_yearly.1063.desc.achievements.piety.very_high } triggered_desc = { trigger = { exists = scope:reason_piety scope:reason_piety = flag:max NOR = { scope:primary_reason = flag:reason_piety scope:secondary_reason = flag:reason_piety } } desc = fp1_yearly.1063.desc.achievements.piety.max } # Lifestyles. triggered_desc = { trigger = { exists = scope:reason_lifestyle_partying NOR = { scope:primary_reason = flag:reason_partying scope:secondary_reason = flag:reason_partying } } desc = fp1_yearly.1063.desc.achievements.lifestyles.partying } triggered_desc = { trigger = { exists = scope:reason_lifestyle_duelling NOR = { scope:primary_reason = flag:reason_duelling scope:secondary_reason = flag:reason_duelling } } desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling } triggered_desc = { trigger = { exists = scope:reason_lifestyle_hunting NOR = { scope:primary_reason = flag:reason_hunting scope:secondary_reason = flag:reason_hunting } } desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting } triggered_desc = { trigger = { exists = scope:reason_lifestyle_magickerationing NOR = { scope:primary_reason = flag:reason_magickerationing scope:secondary_reason = flag:reason_magickerationing } } desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing } } desc = fp1_yearly.1063.desc.achievements.triple.outro } } # Burial type block. ## Small stone ship. triggered_desc = { trigger = { scope:burial_type = flag:stone_small } desc = fp1_yearly.1063.desc.ship_stone_small } ## Grand stone ship. triggered_desc = { trigger = { scope:burial_type = flag:stone_grand } desc = fp1_yearly.1063.desc.ship_stone_grand } ## Ornate wooden ship. triggered_desc = { trigger = { scope:burial_type = flag:wooden_ornate } desc = fp1_yearly.1063.desc.ship_wood_ornate } desc = fp1_yearly.1063.desc.outro } theme = death left_portrait = { character = scope:mourner animation = grief } right_portrait = { character = scope:ship_funeral_candidate animation = sadness } override_background = { reference = temple } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_even_at_war_adult = yes # Must still be the same faith as scope:ship_funeral_candidate, for ease of loc and such. faith = scope:ship_funeral_candidate.faith } on_trigger_fail = { # Return invested monies. send_interface_toast = { title = fp1_yearly.1063.trigger_failure.tt left_icon = scope:ship_funeral_candidate add_gold = var:ship_burial_reimbursement } # Clear up variables. fp1_funeral_longship_clear_variables_effect = yes } immediate = { # Work out how many achievements scope:ship_funeral_candidate actually had. set_variable = { name = candidate_achievement_count value = 0 } ## First, tier. if = { limit = { exists = scope:reason_title } change_variable = { name = candidate_achievement_count add = 1 } } ## Then, prestige. if = { limit = { exists = scope:reason_prestige } change_variable = { name = candidate_achievement_count add = 1 } } ## Next, piety. if = { limit = { exists = scope:reason_piety } change_variable = { name = candidate_achievement_count add = 1 } } ## Finally, lifestyles. if = { limit = { exists = scope:reason_lifestyle_partying } change_variable = { name = candidate_achievement_count add = 1 } } if = { limit = { exists = scope:reason_lifestyle_duelling } change_variable = { name = candidate_achievement_count add = 1 } } if = { limit = { exists = scope:reason_lifestyle_hunting } change_variable = { name = candidate_achievement_count add = 1 } } if = { limit = { exists = scope:reason_lifestyle_magickerationing } change_variable = { name = candidate_achievement_count add = 1 } } # Flag reasons so that they don't repeat; due to variable issues, we just calc this every time. # Primary reason. ## comment_folder = { # Cycle through tier. if = { limit = { exists = scope:reason_title } save_scope_value_as = { name = primary_reason value = flag:reason_title } } # Then prestige. else_if = { limit = { exists = scope:reason_prestige } save_scope_value_as = { name = primary_reason value = flag:reason_prestige } } # Piety. else_if = { limit = { exists = scope:reason_piety } save_scope_value_as = { name = primary_reason value = flag:reason_piety } } # And lifestyles. else_if = { limit = { exists = scope:reason_lifestyle_partying } save_scope_value_as = { name = primary_reason value = flag:reason_partying } } else_if = { limit = { exists = scope:reason_lifestyle_duelling } save_scope_value_as = { name = primary_reason value = flag:reason_duelling } } else_if = { limit = { exists = scope:reason_lifestyle_hunting } save_scope_value_as = { name = primary_reason value = flag:reason_hunting } } else_if = { limit = { exists = scope:reason_lifestyle_magickerationing } save_scope_value_as = { name = primary_reason value = flag:reason_magickerationing } } ##} # Secondary reason. ## Comment folder for easy organisation = { # Cycle through tier. if = { limit = { exists = scope:reason_title NOT = { scope:primary_reason = flag:reason_title } } save_scope_value_as = { name = secondary_reason value = flag:reason_title } } # Then prestige. else_if = { limit = { exists = scope:reason_prestige NOT = { scope:primary_reason = flag:reason_prestige } } save_scope_value_as = { name = secondary_reason value = flag:reason_prestige } } # Piety. else_if = { limit = { exists = scope:reason_piety NOT = { scope:primary_reason = flag:reason_piety } } save_scope_value_as = { name = secondary_reason value = flag:reason_piety } } # And lifestyles. else_if = { limit = { exists = scope:reason_lifestyle_partying NOT = { scope:primary_reason = flag:reason_partying } } save_scope_value_as = { name = secondary_reason value = flag:reason_partying } } else_if = { limit = { exists = scope:reason_lifestyle_duelling NOT = { scope:primary_reason = flag:reason_duelling } } save_scope_value_as = { name = secondary_reason value = flag:reason_duelling } } else_if = { limit = { exists = scope:reason_lifestyle_hunting NOT = { scope:primary_reason = flag:reason_hunting } } save_scope_value_as = { name = secondary_reason value = flag:reason_hunting } } else_if = { limit = { exists = scope:reason_lifestyle_magickerationing NOT = { scope:primary_reason = flag:reason_magickerationing } } save_scope_value_as = { name = secondary_reason value = flag:reason_magickerationing } } ##} # If scope:ship_funeral_candidate is a hunter, set up a suitable place for them to have been hunting (for loc). scope:ship_funeral_candidate = { if = { limit = { hunt_lifestyle_track_greater_equal_trigger = { TRACK = hunter GREATER_EQUAL = 100 } } if = { limit = { highest_held_title_tier >= tier_county } primary_title = { save_scope_as = hunting_lands } } else = { scope:mourner.primary_title = { save_scope_as = hunting_lands } } } } } # Boats to boats, tumuli to tumuli. option = { name = fp1_yearly.1063.a # Small stone ships give a modest chunk. if = { limit = { scope:burial_type = flag:stone_small } add_prestige = minor_prestige_gain } # Grand stone ships give a decent chunk. if = { limit = { scope:burial_type = flag:stone_grand } add_prestige = medium_prestige_gain } # Ornate wooden ships give a large chunk. if = { limit = { scope:burial_type = flag:wooden_ornate } add_prestige = major_prestige_gain } # Stress relief is the same regardless of what level you opted for. add_stress = major_stress_loss # No extra stress impact for single-option events, usually. ai_chance = { # Only option. base = 100 } } after = { # Clear up remaining values on the character. fp1_funeral_longship_clear_variables_effect = yes } } ################################################## # Sparklingly Clean # by Ewan Cowhig Croft # 1071 - 1080 ################################################## # You decide to put a little extra effort into your appearance. fp1_yearly.1071 = { type = character_event title = fp1_yearly.1071.t desc = fp1_yearly.1071.desc theme = physical_health left_portrait = { character = root animation = happiness } override_background = { reference = bedchamber } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Standard checks. is_available_at_peace_adult = yes is_healthy = yes NOT = { has_character_flag = had_event_fp1_yearly_1071 } is_landed = yes # Filter to flavour-appropriate characters. fp1_is_norse = yes } weight_multiplier = { base = 1 # Weight up a bit for the healthy types. modifier = { add = 0.5 has_trait = diligent } modifier = { add = 0.5 has_trait = whole_of_body } } immediate = { add_character_flag = { flag = had_event_fp1_yearly_1071 days = 3650 } } # Hygiene is the key to a long life! option = { name = fp1_yearly.1071.a # Add a modifier boosting health. add_character_modifier = { modifier = fp1_bathing_health_modifier years = 10 } stress_impact = { diligent = medium_stress_impact_loss lazy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_energy = 0.75 ai_sociability = 0.25 } modifier = { # Weight up for stress. add = 20 has_trait = diligent } modifier = { # Weight down for stress. add = -20 has_trait = lazy } } } # I suppose I could take a little extra care... option = { name = fp1_yearly.1071.b # Add a modifier boosting attraction. add_character_modifier = { modifier = fp1_bathing_attraction_modifier years = 10 } stress_impact = { diligent = medium_stress_impact_loss lazy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.75 ai_energy = 0.25 } modifier = { # Weight up for stress. add = 20 has_trait = diligent } modifier = { # Weight down for stress. add = -20 has_trait = lazy } } } # Just the usual is fine. option = { name = fp1_yearly.1071.c # Lose a bit of stress for taking it easy. ## Stress loss handled in stress_impact. stress_impact = { base = medium_stress_loss lazy = medium_stress_impact_loss diligent = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = -0.1 ai_energy = -0.5 } modifier = { # Weight up for stress. add = 20 has_trait = lazy } modifier = { # Weight down for stress. add = -20 has_trait = diligent } } } } ################################################## # Explorer from Phantom Islands # by Ewan Cowhig Croft # 1081 - 1090 ################################################## # An explorer of the Atlantic wishes to share their tales with you. fp1_yearly.1081 = { type = character_event title = fp1_yearly.1081.t desc = { desc = fp1_yearly.1081.desc.intro first_valid = { triggered_desc = { trigger = { scope:phantom_island = flag:greenland } desc = fp1_yearly.1081.desc.greenland } triggered_desc = { trigger = { scope:phantom_island = flag:vinland } desc = fp1_yearly.1081.desc.vinland } triggered_desc = { trigger = { scope:phantom_island = flag:antilia } desc = fp1_yearly.1081.desc.antilia } triggered_desc = { trigger = { scope:phantom_island = flag:fortunate_isles religion = religion:hellenism_religion } desc = fp1_yearly.1081.desc.fortunate_isles.hellenist } triggered_desc = { trigger = { scope:phantom_island = flag:fortunate_isles } desc = fp1_yearly.1081.desc.fortunate_isles.other } triggered_desc = { trigger = { scope:phantom_island = flag:st_brendans_island } desc = fp1_yearly.1081.desc.st_brendans_island } triggered_desc = { trigger = { scope:phantom_island = flag:isle_of_the_blessed OR = { religion = religion:eastern_orthodox_religion religion = religion:catholic_religion religion = religion:protestant_religion } } desc = fp1_yearly.1081.desc.isle_of_the_blessed.christian } triggered_desc = { trigger = { scope:phantom_island = flag:isle_of_the_blessed } desc = fp1_yearly.1081.desc.isle_of_the_blessed.other } triggered_desc = { trigger = { scope:phantom_island = flag:ard_majhulah } desc = fp1_yearly.1081.desc.ard_majhulah } triggered_desc = { trigger = { scope:phantom_island = flag:the_sticky_sea } desc = fp1_yearly.1081.desc.the_sticky_sea } triggered_desc = { trigger = { scope:phantom_island = flag:purple_islands } desc = fp1_yearly.1081.desc.purple_islands } triggered_desc = { trigger = { scope:phantom_island = flag:hy_brasil } desc = fp1_yearly.1081.desc.hy_brasil } triggered_desc = { trigger = { scope:phantom_island = flag:thule } desc = fp1_yearly.1081.desc.thule } triggered_desc = { trigger = { scope:phantom_island = flag:great_ireland religion = { is_in_family = rf_abrahamic } } desc = fp1_yearly.1081.desc.great_ireland.abrahamic } triggered_desc = { trigger = { scope:phantom_island = flag:great_ireland } desc = fp1_yearly.1081.desc.great_ireland.other } triggered_desc = { trigger = { scope:phantom_island = flag:sunset_empire } desc = fp1_yearly.1081.desc.sunset_empire } } desc = fp1_yearly.1081.desc.outro } theme = friendly left_portrait = { character = root animation = toast triggered_animation = { trigger = { scope:phantom_island = flag:sunset_empire has_trait = craven } animation = fear } } right_portrait = { character = scope:norse_explorer animation = storyteller } override_background = { reference = study } trigger = { #DLC check. has_fp1_dlc_trigger = yes #No need for these character modifiers to appear in the wild and feel less unique. is_ai = no #Standard checks. is_available_even_at_war_adult = yes NOT = { has_character_flag = had_event_fp1_yearly_1081 } #Must be North Germanic. culture = { has_cultural_pillar = heritage_north_germanic } #Has to keep their capital in general Scandinavian core sphere of influence. capital_province = { OR = { geographical_region = world_europe_west geographical_region = world_europe_north geographical_region = world_europe_east } } #The Norse must still be in their hyper-exploratory phase. NOT = { culture = { has_cultural_era_or_later = culture_era_high_medieval } } } weight_multiplier = { base = 1 #Learned characters attract people with curious stories. modifier = { add = 1 has_trait = scholar } modifier = { add = 1 learning >= very_high_skill_rating } } immediate = { #Once per lifetime. add_character_flag = { flag = had_event_fp1_yearly_1081 } #Select which phantom island we're looking at! ##12 items with an 8.3% chance each to be selected, with the remaining 0.4% going to the thirteenth item: Sunset Invasion. random_list = { #Greenland 83 = { save_scope_value_as = { name = phantom_island value = flag:greenland } } #Vinland 83 = { save_scope_value_as = { name = phantom_island value = flag:vinland } } #Antilia 83 = { save_scope_value_as = { name = phantom_island value = flag:antilia } #If Portugal exists, then obviously they were time-travelling Portuguese. if = { limit = { is_target_in_global_variable_list = { name = unavailable_unique_decisions target = flag:form_portugal_decision } } culture:portuguese = { save_scope_as = antilia_culture } } #If Galician exists, they must have been from Galicia! else_if = { limit = { has_global_variable = visigothic_culture_split } culture:galician = { save_scope_as = antilia_culture } } #Otherwise, bog-standard Visigoths. else = { culture:visigothic = { save_scope_as = antilia_culture } } } #Fortunate Isles 83 = { save_scope_value_as = { name = phantom_island value = flag:fortunate_isles } } #St. Brendan's Island 83 = { save_scope_value_as = { name = phantom_island value = flag:st_brendans_island } } #Isle of the Blessed 83 = { save_scope_value_as = { name = phantom_island value = flag:isle_of_the_blessed } } #Ard Majhūlah 83 = { save_scope_value_as = { name = phantom_island value = flag:ard_majhulah } } #The Sticky Sea 83 = { save_scope_value_as = { name = phantom_island value = flag:the_sticky_sea } } #Purple Islands 83 = { save_scope_value_as = { name = phantom_island value = flag:purple_islands } } #Hy Brasil 83 = { save_scope_value_as = { name = phantom_island value = flag:hy_brasil } } #Thule 83 = { save_scope_value_as = { name = phantom_island value = flag:thule } } #Great Ireland 83 = { save_scope_value_as = { name = phantom_island value = flag:great_ireland } } #Sunset Empire 4 = { save_scope_value_as = { name = phantom_island value = flag:sunset_empire } } } #Create an explorer, selecting an appropriate template according to whether or not their story is truthful. if = { limit = { OR = { scope:phantom_island = flag:greenland scope:phantom_island = flag:purple_islands scope:phantom_island = flag:sunset_empire #Mostly here just to freak people out for funsies. } #Technically, Vinland & the Sargasso Sea are real locations as well, but our loc clearly indicates that the explorer has never been there, and is repeating second-hand tales at best. } create_character = { location = root.capital_province template = fp1_truthful_explorer_character save_scope_as = norse_explorer } } else = { create_character = { location = root.capital_province template = fp1_deceitful_explorer_character save_scope_as = norse_explorer } } } #Memorise the interesting trivia. option = { name = fp1_yearly.1081.a #Nice little diplo modifier. add_character_modifier = { modifier = phantom_island_trivia_fp1_modifier years = 20 } stress_impact = { humble = minor_stress_impact_loss arrogant = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.25 ai_boldness = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = humble } modifier = { #Weight down for stress. add = -10 has_trait = arrogant } } } #Poke holes in the story. option = { name = fp1_yearly.1081.b #Nice little intrigue modifier. add_character_modifier = { modifier = phantom_island_critique_fp1_modifier years = 20 } stress_impact = { paranoid = minor_stress_impact_loss trusting = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.25 ai_compassion = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = paranoid } modifier = { #Weight down for stress. add = -10 has_trait = trusting } } } #Wish them well and on their way. option = { name = { trigger = { NOT = { scope:phantom_island = flag:sunset_empire } } text = fp1_yearly.1081.c } name = { trigger = { scope:phantom_island = flag:sunset_empire } text = fp1_yearly.1081.c.sunset_empire } # Assuming you don't have Aztecs, then get a solid bit of stress relief. if = { limit = { NOT = { scope:phantom_island = flag:sunset_empire } } stress_impact = { base = major_stress_loss trusting = minor_stress_impact_loss paranoid = minor_stress_impact_gain } } # Otherwise... else = { stress_impact = { base = major_stress_gain trusting = minor_stress_impact_loss paranoid = minor_stress_impact_gain } } # Stress impact handled in above if blocks. ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.25 ai_energy = -0.25 } modifier = { #Weight up for stress. add = 10 has_trait = trusting } modifier = { #Weight down for stress. add = -10 has_trait = paranoid } } } after = { #Dispose of our explorer. scope:norse_explorer = { hidden_effect = { death = { death_reason = death_vanished } } } } }