namespace = single_combat ################################################## # # SINGLE COMBAT EVENTS # 0001 - 0020 Participant Events # 0021 - 0030 Round End Events # 0031 - 0050 Results Events # 1001 - 1020 Debug Events # ################################################## ################################################## # MISC SCRIPTED TRIGGERS # If scope:fatality = flag:default, then will a character die when the duel is concluded? scripted_trigger fatality_default_will_die_trigger = { scope:sc_attacker = { OR = { #scope:sc_attacker is tribal. AND = { is_ruler = yes government_has_flag = government_is_tribal } #scope:sc_attacker has a tribal court_owner. AND = { is_ruler = no exists = court_owner scope:sc_attacker.court_owner = { government_has_flag = government_is_tribal} } #scope:sc_attacker has a tribal host. AND = { is_ruler = no exists = host scope:sc_attacker.host = { government_has_flag = government_is_tribal } } #scope:sc_attacker is isolated & landless, in which case we check scope:sc_defender. AND = { is_ruler = no NOR = { exists = court_owner exists = host } scope:sc_defender = { OR = { #scope:sc_defender is tribal. AND = { is_ruler = yes government_has_flag = government_is_tribal } #scope:sc_defender has a tribal court_owner. AND = { is_ruler = no exists = court_owner scope:sc_defender.court_owner = { government_has_flag = government_is_tribal} } #scope:sc_defender has a tribal host. AND = { is_ruler = no exists = host scope:sc_defender.host = { government_has_flag = government_is_tribal } } } } } } } } # Will the duel end in the death of your opponent for any reason? scripted_trigger duel_will_end_in_opponent_death_trigger = { # Hard disable if fatality has been disabled. NOT = { scope:fatality = flag:no } OR = { # The duel has default fatality enabled & validated. fatality_default_will_die_trigger = yes # The duel has fatality possible & your opponent is already critically wounded. OR = { AND = { this = scope:sc_attacker scope:fatality = flag:possible scope:sc_defender = { has_trait = wounded_3 } } AND = { this = scope:sc_defender scope:fatality = flag:possible scope:sc_attacker = { has_trait = wounded_3 } } } # Fatality has been force-enabled. scope:fatality = flag:always } } scripted_trigger duel_will_end_in_my_death_trigger = { # Hard disable if fatality has been disabled. NOT = { scope:fatality = flag:no } OR = { # The duel has default fatality enabled & validated. fatality_default_will_die_trigger = yes # The duel has fatality possible & you are already critically wounded. AND = { scope:fatality = flag:possible has_trait = wounded_3 } # Fatality has been force-enabled. scope:fatality = flag:always } } scripted_trigger house_not_allowed_to_yell_motto_trigger = { OR = { NOT = { exists = house } # Historical dynasty = dynasty:1055 house = house:house_british_isles_wessex # Vanity: because they're long. dynasty = dynasty:vanity_riedinger dynasty = dynasty:vanity_kaltsogiannis # Vanity: because their punctuation screws things up. dynasty = dynasty:vanity_bjarnehed dynasty = dynasty:vanity_daflos dynasty = dynasty:vanity_welch dynasty = dynasty:vanity_opara dynasty = dynasty:vanity_beaumont } } scripted_trigger rocky_locale_trigger = { OR = { terrain = hills terrain = mountains terrain = desert_mountains } } ################################################## # GENERAL SCRIPTED EFFECTS # Grab a single special move from the list for this character to use this round. scripted_effect select_special_tier_move_effect = { #First, we flag that the character now has a special move option. set_local_variable = { name = combat_move_special_slot_used_flag value = yes } #Then, we pick which move they get. random_list = { # High Secondary Skill moves ## Reason You Suck Speech 1000 = { trigger = { NOT = { exists = local_var:combat_move_reason_you_suck_speech_flag } diplomacy >= very_high_skill_rating # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:reason_you_suck_speech } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:reason_you_suck_speech } } } set_local_variable = { name = combat_move_reason_you_suck_speech_flag value = yes } } ## Technique from Legend 1000 = { trigger = { NOT = { exists = local_var:combat_move_technique_from_legend_flag } learning >= very_high_skill_rating # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:technique_from_legend } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:technique_from_legend } } } set_local_variable = { name = combat_move_technique_from_legend_flag value = yes } } ## Like a Viper 1000 = { trigger = { NOT = { exists = local_var:combat_move_like_a_viper_flag } intrigue >= very_high_skill_rating # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:like_a_viper } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:like_a_viper } } } set_local_variable = { name = combat_move_like_a_viper_flag value = yes } } ## Pocket Silver 1000 = { trigger = { NOT = { exists = local_var:combat_move_pocket_silver_flag } stewardship >= very_high_skill_rating short_term_gold >= combat_move_pocket_silver_value # Move essentially requires two arms, I'm afraid. NOT = { has_trait = maimed } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:pocket_silver } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:pocket_silver } } } set_local_variable = { name = combat_move_pocket_silver_flag value = yes } } ## Martial Voice 1000 = { trigger = { NOT = { exists = local_var:combat_move_martial_voice_flag } martial >= very_high_skill_rating # For now, the loc relies on your opponent being noble, so you ironically can't use your peasant-commanding voice on actual peasants. OR = { AND = { this = scope:sc_defender scope:sc_attacker = { exists = house NOR = { has_trait = peasant_leader government_has_flag = government_is_republic } } } AND = { this = scope:sc_attacker scope:sc_defender = { exists = house NOR = { has_trait = peasant_leader government_has_flag = government_is_republic } } } } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:martial_voice } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:martial_voice } } } set_local_variable = { name = combat_move_martial_voice_flag value = yes } } ## Mocking Boast 1000 = { trigger = { NOT = { exists = local_var:combat_move_mocking_boast_flag } OR = { AND = { this = scope:sc_attacker scope:sc_attacker.prestige_level > scope:sc_defender.prestige_level # A humble opponent doesn't give two shits. scope:sc_defender = { NOT = { has_trait = humble } } } AND = { this = scope:sc_defender scope:sc_defender.prestige_level > scope:sc_attacker.prestige_level # A humble opponent doesn't give two shits. scope:sc_attacker = { NOT = { has_trait = humble } } } } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:mocking_boast } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:mocking_boast } } } set_local_variable = { name = combat_move_mocking_boast_flag value = yes } } # Location-Specific moves ## Is that a Crocodile?! 1 = { #Super-rare, pretty much an instant kill. trigger = { NOT = { exists = local_var:combat_move_is_that_a_crocodile_flag } # Must be happening in a wild environment. scope:locale = flag:terrain_scope # Can't have already had a crocodile used by either party this duel. NOT = { exists = scope:had_crocodile } # Must be in a place that has crocodiles. single_combat_location_has_crocodilians_trigger = yes # Duel must be one that would end in fatality. duel_will_end_in_opponent_death_trigger = yes } set_local_variable = { name = combat_move_is_that_a_crocodile_flag value = yes } # No down-weight for something that's already 0.001%. } ## Desert Warrior 1000 = { trigger = { NOT = { exists = local_var:combat_move_desert_warrior_flag } has_trait = desert_warrior # Must be happening in a wild environment. scope:locale = flag:terrain_scope #Both characters being experts cancel each other out. NAND = { scope:sc_attacker = { has_trait = desert_warrior } scope:sc_defender = { has_trait = desert_warrior } } scope:sc_defender.location = { OR = { terrain = desert terrain = drylands terrain = oasis } } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:desert_warrior } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:desert_warrior } } } set_local_variable = { name = combat_move_desert_warrior_flag value = yes } } ## Jungle Stalker 1000 = { trigger = { NOT = { exists = local_var:combat_move_jungle_stalker_flag } has_trait = jungle_stalker # Must be happening in a wild environment. scope:locale = flag:terrain_scope #Both characters being experts cancel each other out. NAND = { scope:sc_attacker = { has_trait = jungle_stalker } scope:sc_defender = { has_trait = jungle_stalker } } scope:sc_defender.location = { terrain = jungle } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:jungle_stalker } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:jungle_stalker } } } set_local_variable = { name = combat_move_jungle_stalker_flag value = yes } } ## Open Terrain Expert 1000 = { trigger = { NOT = { exists = local_var:combat_move_open_terrain_expert_flag } has_trait = open_terrain_expert # Must be happening in a wild environment. scope:locale = flag:terrain_scope #Both characters being experts cancel each other out. NAND = { scope:sc_attacker = { has_trait = open_terrain_expert } scope:sc_defender = { has_trait = open_terrain_expert } } scope:sc_defender.location = { OR = { terrain = farmlands terrain = plains terrain = steppe } } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:open_terrain_expert } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:open_terrain_expert } } } set_local_variable = { name = combat_move_open_terrain_expert_flag value = yes } } ## Rough Terrain Expert 1000 = { trigger = { NOT = { exists = local_var:combat_move_rough_terrain_expert_flag } has_trait = rough_terrain_expert # Must be happening in a wild environment. scope:locale = flag:terrain_scope #Both characters being experts cancel each other out. NAND = { scope:sc_attacker = { has_trait = rough_terrain_expert } scope:sc_defender = { has_trait = rough_terrain_expert } } scope:sc_defender.location = { OR = { terrain = hills terrain = mountains terrain = desert_mountains #Technically a desert, but not for single combat purposes. terrain = wetlands } } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:rough_terrain_expert } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:rough_terrain_expert } } } set_local_variable = { name = combat_move_rough_terrain_expert_flag value = yes } } ## Forest Fighter 1000 = { trigger = { NOT = { exists = local_var:combat_move_forest_fighter_flag } has_trait = forest_fighter # Must be happening in a wild environment. scope:locale = flag:terrain_scope #Both characters being experts cancel each other out. NAND = { scope:sc_attacker = { has_trait = forest_fighter } scope:sc_defender = { has_trait = forest_fighter } } scope:sc_defender.location = { OR = { terrain = forest terrain = taiga } } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:forest_fighter } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:forest_fighter } } } set_local_variable = { name = combat_move_forest_fighter_flag value = yes } } # Trait-Specific moves ## RAAARGH! 5000 = { trigger = { NOT = { exists = local_var:combat_move_raaargh_flag } has_trait = berserker # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:raaargh } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:raaargh } } } set_local_variable = { name = combat_move_raaargh_flag value = yes } } ## Hard Grit 2000 = { trigger = { NOT = { exists = local_var:combat_move_hard_grit_flag } has_trait = shieldmaiden # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:hard_grit } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:hard_grit } } } set_local_variable = { name = combat_move_hard_grit_flag value = yes } } ## Feint & Stab 2000 = { trigger = { NOT = { exists = local_var:combat_move_feint_and_stab_flag } has_trait = lifestyle_hunter # Move specifically requires two arms, I'm afraid. NOT = { has_trait = maimed } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:feint_and_stab } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:feint_and_stab } } } set_local_variable = { name = combat_move_feint_and_stab_flag value = yes } } ## Butchery 2000 = { trigger = { NOT = { exists = local_var:combat_move_butchery_flag } has_trait = viking # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:butchery } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:butchery } } } set_local_variable = { name = combat_move_butchery_flag value = yes } } ## Stoic Veteran 2000 = { trigger = { NOT = { exists = local_var:combat_move_stoic_veteran_flag } has_trait = varangian # Can't use the Varangian trait against the Eastern Roman Emperor, as that's just not cricket. NOR = { AND = { this = scope:sc_defender scope:sc_attacker = { has_title = title:e_byzantium } } AND = { this = scope:sc_attacker scope:sc_defender = { has_title = title:e_byzantium } } } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:stoic_veteran } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:stoic_veteran } } } set_local_variable = { name = combat_move_stoic_veteran_flag value = yes } } ## Blade Dance 2000 = { trigger = { NOT = { exists = local_var:combat_move_blade_dance_flag } has_trait = lifestyle_blademaster # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:blade_dance } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:blade_dance } } } set_local_variable = { name = combat_move_blade_dance_flag value = yes } } ## Wrath of [HighGod] 1000 = { trigger = { NOT = { exists = local_var:combat_move_wrath_of_highgod_flag } has_trait = zealous faith = { NOT = { has_doctrine_parameter = holy_wars_forbidden } } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:wrath_of_highgod } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:wrath_of_highgod } } } set_local_variable = { name = combat_move_wrath_of_highgod_flag value = yes } } ## Hurt Me Better 2000 = { trigger = { NOT = { exists = local_var:combat_move_hurt_me_better_flag } OR = { has_trait = deviant any_secret = { type = secret_deviant } } # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:hurt_me_better } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:hurt_me_better } } } set_local_variable = { name = combat_move_hurt_me_better_flag value = yes } } # Misc moves ## Kick a rock at their shin. 1 = { #Fallback move; we don't really ever want to see this. trigger = { NOT = { exists = local_var:combat_move_special_fallback_flag } #Fallback, always available. } set_local_variable = { name = combat_move_special_fallback_flag value = yes } # No down-weight for something that's already 0.001%. } ## Something to Hide 1000 = { trigger = { NOT = { exists = local_var:combat_move_something_to_hide_flag } OR = { AND = { this = scope:sc_attacker has_usable_hook = scope:sc_defender } AND = { this = scope:sc_defender has_usable_hook = scope:sc_attacker } } # The single combat cannot be fatal, or this is moot. duel_will_end_in_opponent_death_trigger = no # Block special moves twice in a row. NOR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:something_to_hide } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:something_to_hide } } } set_local_variable = { name = combat_move_something_to_hide_flag value = yes } } } } # Select a single tier 1 combat move from the list. scripted_effect select_tier_1_move_effect = { random_list = { #Ordinary moves. 70 = { random_list = { # Wait and Hope 1000 = { trigger = { NOT = { exists = local_var:combat_move_wait_and_hope_flag } #Fallback, always available. } set_local_variable = { name = combat_move_wait_and_hope_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:wait_and_hope } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:wait_and_hope } } } } # Unsure Attack 1000 = { trigger = { NOT = { exists = local_var:combat_move_unsure_attack_flag } #Fallback, always available. } set_local_variable = { name = combat_move_unsure_attack_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:unsure_attack } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:unsure_attack } } } } # Enthusiastic Onslaught 1000 = { trigger = { NOT = { exists = local_var:combat_move_enthusiastic_onslaught_flag } #Fallback, always available. } set_local_variable = { name = combat_move_enthusiastic_onslaught_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:enthusiastic_onslaught } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:enthusiastic_onslaught } } } } # Hail Mary 1000 = { trigger = { NOT = { exists = local_var:combat_move_hail_mary_flag } #Only valid against an opponent who _truly_ outclasses you. OR = { AND = { this = scope:sc_attacker prowess_diff = { target = scope:sc_defender value <= -10 } } AND = { this = scope:sc_defender prowess_diff = { target = scope:sc_attacker value <= -10 } } } } set_local_variable = { name = combat_move_hail_mary_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:hail_mary } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:hail_mary } } } } # Pocket Sand 1000 = { trigger = { NOT = { exists = local_var:combat_move_pocket_sand_flag } #Only valid against opponents who really won't be able to see it coming a mile away. OR = { AND = { this = scope:sc_attacker scope:sc_defender.prowess <= medium_scsk } AND = { this = scope:sc_defender scope:sc_attacker.prowess <= medium_scsk } } # Move essentially requires two arms, I'm afraid. NOT = { has_trait = maimed } } set_local_variable = { name = combat_move_pocket_sand_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:pocket_sand } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:pocket_sand } } } } # Nut 'em 1000 = { trigger = { NOT = { exists = local_var:combat_move_nut_em_flag } #No special requirements. } set_local_variable = { name = combat_move_nut_em_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:nut_em } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:nut_em } } } } } } #Special moves. 30 = { trigger = { NOT = { exists = local_var:combat_move_special_slot_used_flag } } select_special_tier_move_effect = yes } } } # Select a single tier 2 combat move from the list. scripted_effect select_tier_2_move_effect = { random_list = { #Ordinary moves. 70 = { random_list = { # Guard 1000 = { trigger = { NOT = { exists = local_var:combat_move_guard_flag } #Fallback, always available. } set_local_variable = { name = combat_move_guard_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:guard } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:guard } } } } # Probing Attack 1000 = { trigger = { NOT = { exists = local_var:combat_move_probing_attack_flag } #Fallback, always available. } set_local_variable = { name = combat_move_probing_attack_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:probing_attack } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:probing_attack } } } } # Onslaught 1000 = { trigger = { NOT = { exists = local_var:combat_move_onslaught_flag } #Fallback, always available. } set_local_variable = { name = combat_move_onslaught_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:onslaught } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:onslaught } } } } # Surprise Attack 1000 = { trigger = { NOT = { exists = local_var:combat_move_surprise_attack_flag } OR = { AND = { this = scope:sc_attacker scope:sc_defender = { NOT = { has_trait = paranoid } } } AND = { this = scope:sc_defender scope:sc_attacker = { NOT = { has_trait = paranoid } } } } } set_local_variable = { name = combat_move_surprise_attack_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:surprise_attack } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:surprise_attack } } } } # Taunt 1000 = { trigger = { NOT = { exists = local_var:combat_move_taunt_flag } OR = { AND = { this = scope:sc_attacker scope:sc_defender = { is_ai = yes NOT = { has_trait = calm } } } AND = { this = scope:sc_defender scope:sc_attacker = { is_ai = yes NOT = { has_trait = calm } } } } } set_local_variable = { name = combat_move_taunt_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:taunt } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:taunt } } } } # Put the Boot In 1000 = { trigger = { NOT = { exists = local_var:combat_move_put_the_boot_in_flag } #No special requirements. } set_local_variable = { name = combat_move_put_the_boot_in_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:put_the_boot_in } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:put_the_boot_in } } } } } } #Special moves. 30 = { trigger = { NOT = { exists = local_var:combat_move_special_slot_used_flag } } select_special_tier_move_effect = yes } } } # Select a single tier 3 combat move from the list. scripted_effect select_tier_3_move_effect = { random_list = { #Ordinary moves. 70 = { random_list = { # Strict Guard 1000 = { trigger = { NOT = { exists = local_var:combat_move_strict_guard_flag } #Fallback, always available. } set_local_variable = { name = combat_move_strict_guard_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:strict_guard } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:strict_guard } } } } # Confident Attack 1000 = { trigger = { NOT = { exists = local_var:combat_move_confident_attack_flag } #Fallback, always available. } set_local_variable = { name = combat_move_confident_attack_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:confident_attack } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:confident_attack } } } } # Expert Onslaught 1000 = { trigger = { NOT = { exists = local_var:combat_move_expert_onslaught_flag } #Fallback, always available. } set_local_variable = { name = combat_move_expert_onslaught_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:expert_onslaught } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:expert_onslaught } } } } # Attempt Disarm 1000 = { trigger = { NOT = { exists = local_var:combat_move_attempt_disarm_flag } OR = { AND = { this = scope:sc_attacker scope:sc_defender = { prowess >= decent_scsk # Blademasters cannot be wrong-footed by a disarmament attempt. NOT = { has_trait = lifestyle_blademaster } } } AND = { this = scope:sc_defender scope:sc_attacker = { prowess >= decent_scsk # Blademasters cannot be wrong-footed by a disarmament attempt. NOT = { has_trait = lifestyle_blademaster } } } } } set_local_variable = { name = combat_move_attempt_disarm_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:attempt_disarm } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:attempt_disarm } } } } # Lightning Assault 1000 = { trigger = { NOT = { exists = local_var:combat_move_lightning_assault_flag } scope:sc_defender.var:current_round = 1 } set_local_variable = { name = combat_move_lightning_assault_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:lightning_assault } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:lightning_assault } } } } # Tire Opponent 1000 = { trigger = { NOT = { exists = local_var:combat_move_tire_opponent_flag } #No special requirements. } set_local_variable = { name = combat_move_tire_opponent_flag value = yes } # Weight down repeat moves modifier = { add = sce_regular_combat_repeat_down_weight OR = { AND = { exists = scope:sc_defender_last_move this = scope:sc_defender scope:sc_defender_last_move = flag:tire_opponent } AND = { exists = scope:sc_attacker_last_move this = scope:sc_attacker scope:sc_attacker_last_move = flag:tire_opponent } } } } } } #Special moves. 30 = { trigger = { NOT = { exists = local_var:combat_move_special_slot_used_flag } } select_special_tier_move_effect = yes } } } # Determine what tier of moves a character is getting this round, then pick them. scripted_effect select_combat_options_from_pool_effect = { # DOCUMENTATION # First, we look at the single combat skill rating of the combatant, and use this to set tier variables for moves. ## Only the best and worst combatants get guaranteed tier moves, all best & all worst tier respectively. ## Second best and second worst have an even 50:50 to get all best/worst tier moves respectively, or to vary one of their move's tier levels by one (e.g., second worst getting x1 tier 2 move and x2 tier 1 moves). ## Each subsequent step towards the middle of the skill_ratings moves the standard tier ratings by 1. So if mediocre_scsk and below is x3 tier 1 moves by default, then medium_scsk is x2 tier 1 and x1 tier 2 moves by default. ## Medium, decent, high, and very_high skill_ratings then have a 33:34:33 chance to vary their tier moves down by one, use their default, or go up by one. ### This gives us an element of randomness, but one that can be gamed within combat encounters by obtaining modifiers, and stacks the odds in favour of skilled warriors without making them the automatic victors every time. # MECHANICS # Roll for tier draws. ## For the sake of easy tweakability, all tiers include all variables, so each one can be adjusted as needed for balance. ## low_scsk or below if = { limit = { prowess <= low_scsk } #low_scsk *always* draws x3 tier 1 moves. set_variable = { name = tier_1_counter value = 3 } set_variable = { name = tier_2_counter value = 0 } set_variable = { name = tier_3_counter value = 0 } } ## mediocre_scsk or below else_if = { limit = { prowess <= mediocre_scsk } random_list = { #Bad roll, -1 to tier set. 50 = { set_variable = { name = tier_1_counter value = 3 } set_variable = { name = tier_2_counter value = 0 } set_variable = { name = tier_3_counter value = 0 } } #Average roll, default tier set. 50 = { set_variable = { name = tier_1_counter value = 2 } set_variable = { name = tier_2_counter value = 1 } set_variable = { name = tier_3_counter value = 0 } } } } ## medium_scsk or below else_if = { limit = { prowess <= medium_scsk } random_list = { #Bad roll, -1 to tier set. 33 = { set_variable = { name = tier_1_counter value = 3 } set_variable = { name = tier_2_counter value = 0 } set_variable = { name = tier_3_counter value = 0 } } #Average roll, default tier set. 34 = { set_variable = { name = tier_1_counter value = 2 } set_variable = { name = tier_2_counter value = 1 } set_variable = { name = tier_3_counter value = 0 } } #Good roll, +1 to tier set. 33 = { set_variable = { name = tier_1_counter value = 1 } set_variable = { name = tier_2_counter value = 1 } set_variable = { name = tier_3_counter value = 1 } } } } ## decent_scsk or below else_if = { limit = { prowess <= decent_scsk } random_list = { #Bad roll, -1 to tier set. 33 = { set_variable = { name = tier_1_counter value = 2 } set_variable = { name = tier_2_counter value = 1 } set_variable = { name = tier_3_counter value = 0 } } #Average roll, default tier set. 34 = { set_variable = { name = tier_1_counter value = 1 } set_variable = { name = tier_2_counter value = 1 } set_variable = { name = tier_3_counter value = 1 } } #Good roll, +1 to tier set. 33 = { set_variable = { name = tier_1_counter value = 0 } set_variable = { name = tier_2_counter value = 2 } set_variable = { name = tier_3_counter value = 1 } } } } ## high_scsk or below else_if = { limit = { prowess <= high_scsk } random_list = { #Bad roll, -1 to tier set. 33 = { set_variable = { name = tier_1_counter value = 1 } set_variable = { name = tier_2_counter value = 1 } set_variable = { name = tier_3_counter value = 1 } } #Average roll, default tier set. 34 = { set_variable = { name = tier_1_counter value = 0 } set_variable = { name = tier_2_counter value = 2 } set_variable = { name = tier_3_counter value = 1 } } #Good roll, +1 to tier set. 33 = { set_variable = { name = tier_1_counter value = 0 } set_variable = { name = tier_2_counter value = 1 } set_variable = { name = tier_3_counter value = 2 } } } } ## very_high_scsk or below else_if = { limit = { prowess <= very_high_scsk } random_list = { #Bad roll, -1 to tier set. 33 = { set_variable = { name = tier_1_counter value = 0 } set_variable = { name = tier_2_counter value = 2 } set_variable = { name = tier_3_counter value = 1 } } #Average roll, default tier set. 34 = { set_variable = { name = tier_1_counter value = 0 } set_variable = { name = tier_2_counter value = 1 } set_variable = { name = tier_3_counter value = 2 } } #Good roll, +1 to tier set. 33 = { set_variable = { name = tier_1_counter value = 0 } set_variable = { name = tier_2_counter value = 0 } set_variable = { name = tier_3_counter value = 3 } } } } ## extremely_high_scsk or below else_if = { limit = { prowess <= extremely_high_scsk } random_list = { #Bad roll, -1 to tier set. 50 = { set_variable = { name = tier_1_counter value = 0 } set_variable = { name = tier_2_counter value = 1 } set_variable = { name = tier_3_counter value = 2 } } #Average roll, default tier set. 50 = { set_variable = { name = tier_1_counter value = 0 } set_variable = { name = tier_2_counter value = 0 } set_variable = { name = tier_3_counter value = 3 } } } } ## more than extremely_high_scsk else = { #Better than extremely_high_scsk always draws x3 tier 3 moves. set_variable = { name = tier_1_counter value = 0 } set_variable = { name = tier_2_counter value = 0 } set_variable = { name = tier_3_counter value = 3 } } # DOCUMENTATION # Next, clear all previous combat flags from the character, & iterate through each tier value up to three times, selecting valid moves from the set. ## Every time we select a move, we reduce that tier's tier count variable by 1, so the player will only ever have three options available. ## Each select_tier_[X]_move_effect set incorporates a mix of flat combat moves and special moves triggered by locations, traits, special circumstances, etc. Special moves are available at all tiers, but you can only roll x1 per round. ## Every tier has at least three ordinary, standard moves that all characters can access, so characters will never not have a full roster of moves. # MECHANICS # Clear previous combat flags. remove_single_combat_character_local_variables_effect = yes # Iterate through combat move sets for each tier till we've got a full roster of moves. ## Tier 1 if = { limit = { # Check that the variable exists; strictly unnecessary, but stops a false positive clogging the error log. has_variable = tier_1_counter var:tier_1_counter > 0 } change_variable = { name = tier_1_counter add = -1 } select_tier_1_move_effect = yes } if = { limit = { # Check that the variable exists; strictly unnecessary, but stops a false positive clogging the error log. has_variable = tier_1_counter var:tier_1_counter > 0 } change_variable = { name = tier_1_counter add = -1 } select_tier_1_move_effect = yes } if = { limit = { # Check that the variable exists; strictly unnecessary, but stops a false positive clogging the error log. has_variable = tier_1_counter var:tier_1_counter > 0 } change_variable = { name = tier_1_counter add = -1 } select_tier_1_move_effect = yes } ## Tier 2 if = { limit = { # Check that the variable exists; strictly unnecessary, but stops a false positive clogging the error log. has_variable = tier_2_counter var:tier_2_counter > 0 } change_variable = { name = tier_2_counter add = -1 } select_tier_2_move_effect = yes } if = { limit = { # Check that the variable exists; strictly unnecessary, but stops a false positive clogging the error log. has_variable = tier_2_counter var:tier_2_counter > 0 } change_variable = { name = tier_2_counter add = -1 } select_tier_2_move_effect = yes } if = { limit = { # Check that the variable exists; strictly unnecessary, but stops a false positive clogging the error log. has_variable = tier_2_counter var:tier_2_counter > 0 } change_variable = { name = tier_2_counter add = -1 } select_tier_2_move_effect = yes } ## Tier 3 if = { limit = { # Check that the variable exists; strictly unnecessary, but stops a false positive clogging the error log. has_variable = tier_3_counter var:tier_3_counter > 0 } change_variable = { name = tier_3_counter add = -1 } select_tier_3_move_effect = yes } if = { limit = { # Check that the variable exists; strictly unnecessary, but stops a false positive clogging the error log. has_variable = tier_3_counter var:tier_3_counter > 0 } change_variable = { name = tier_3_counter add = -1 } select_tier_3_move_effect = yes } if = { limit = { # Check that the variable exists; strictly unnecessary, but stops a false positive clogging the error log. has_variable = tier_3_counter var:tier_3_counter > 0 } change_variable = { name = tier_3_counter add = -1 } select_tier_3_move_effect = yes } } # Determine whether scope:sc_loser will be unharmed, wounded, or killed at the end of a duel. scripted_effect work_out_wounds_or_death_effect = { #Fatality:Practice - no wounds, please if = { limit = { scope:fatality = flag:practice } # No extra effect. } # Fatality:No = death has been disabled. if = { limit = { scope:fatality = flag:no } scope:sc_loser = { increase_wounds_no_death_effect = { REASON = duel } } } # Fatality:Possible = death is only possible via wounds. else_if = { limit = { scope:fatality = flag:possible } scope:sc_loser = { increase_wounds_effect = { REASON = duel } } } # Fatality:Default = death is only possible for non-tribals, and always for tribals, taking scope:sc_attacker as the instigating government. else_if = { limit = { scope:fatality = flag:default } if = { limit = { fatality_default_will_die_trigger = yes } scope:sc_loser = { death = { killer = scope:sc_victor death_reason = death_duel } } if = { limit = { scope:sc_victor = { faith = { has_doctrine = tenet_cranial_trophies } } } tgp_cranial_trophies_beheading_effect = { KILLER = scope:sc_victor DEAD = scope:sc_loser } } } else = { scope:sc_loser = { increase_wounds_effect = { REASON = duel } } } } # Fatality:Always = losing is always fatal. else_if = { limit = { scope:fatality = flag:always } scope:sc_victor = { if = { limit = { this = scope:sc_attacker NOT = { has_execute_reason = scope:sc_loser } } add_kinslayer_trait_or_nothing_effect = { VICTIM = scope:sc_loser } } } scope:sc_loser = { death = { killer = scope:sc_victor death_reason = death_duel } } if = { limit = { scope:sc_victor = { faith = { has_doctrine = tenet_cranial_trophies } } } tgp_cranial_trophies_beheading_effect = { KILLER = scope:sc_victor DEAD = scope:sc_loser } } } } # Sort the end of combat rigmarole & clean-up. scripted_effect finalise_combat_results_effect = { # Determine if a death rattle is applicable, and if so, set which one. scope:sc_loser = { if = { limit = { duel_will_end_in_my_death_trigger = yes } # First off, we look to see if scope:sc_loser is prevented from talking. ## wordless if = { limit = { OR = { AND = { this = scope:sc_defender OR = { scope:sc_attacker_last_move = flag:technique_from_legend scope:sc_attacker_last_move = flag:hail_mary scope:sc_attacker_last_move = flag:like_a_viper } } AND = { this = scope:sc_attacker OR = { scope:sc_defender_last_move = flag:onslaught scope:sc_defender_last_move = flag:strict_guard scope:sc_defender_last_move = flag:pocket_silver scope:sc_defender_last_move = flag:blade_dance } } } } save_scope_value_as = { name = death_rattle value = flag:wordless } } ## muffled else_if = { limit = { OR = { AND = { this = scope:sc_defender OR = { scope:sc_attacker_last_move = flag:is_that_a_crocodile AND = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } } } AND = { this = scope:sc_attacker # Scope:sc_attacker currently only suffers this for the wetlands death. It'll need to be sub-AND'ed as above if any more are added. scope:sc_defender_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } } } save_scope_value_as = { name = death_rattle value = flag:muffled } } ## choking else_if = { limit = { OR = { AND = { this = scope:sc_defender OR = { scope:sc_attacker_last_move = flag:wait_and_hope scope:sc_attacker_last_move = flag:enthusiastic_onslaught scope:sc_attacker_last_move = flag:pocket_sand scope:sc_attacker_last_move = flag:expert_onslaught scope:sc_attacker_last_move = flag:reason_you_suck_speech scope:sc_attacker_last_move = flag:pocket_silver scope:sc_attacker_last_move = flag:raaargh scope:sc_attacker_last_move = flag:hard_grit scope:sc_attacker_last_move = flag:butchery } } AND = { this = scope:sc_attacker OR = { scope:sc_defender_last_move = flag:wait_and_hope scope:sc_defender_last_move = flag:unsure_attack scope:sc_defender_last_move = flag:pocket_sand scope:sc_defender_last_move = flag:nut_em scope:sc_defender_last_move = flag:tire_opponent scope:sc_defender_last_move = flag:martial_voice scope:sc_defender_last_move = flag:is_that_a_crocodile scope:sc_defender_last_move = flag:desert_warrior scope:sc_defender_last_move = flag:butchery } } } } save_scope_value_as = { name = death_rattle value = flag:choking } } ## pleading screams else_if = { limit = { # We actually don't use this for scope:sc_defender anywhere at present. this = scope:sc_attacker scope:sc_defender_last_move = flag:expert_onslaught } save_scope_value_as = { name = death_rattle value = flag:pleading_screams } } # Then, we go through possible relations, ordered by importance/rarity. ## has soulmate else_if = { limit = { any_relation = { type = soulmate count >= 1 this != scope:sc_victor } } random_relation = { type = soulmate save_scope_as = sc_loser_soulmate } save_scope_value_as = { name = death_rattle value = flag:soulmate } } ## has best_friend else_if = { limit = { any_relation = { type = best_friend count >= 1 this != scope:sc_victor } } random_relation = { type = best_friend save_scope_as = sc_loser_best_friend } save_scope_value_as = { name = death_rattle value = flag:best_friend } } ## killed_by_soulmate else_if = { limit = { has_relation_soulmate = scope:sc_victor } save_scope_value_as = { name = death_rattle value = flag:killed_by_soulmate } } ## killed_by_best_friend else_if = { limit = { has_relation_best_friend = scope:sc_victor } save_scope_value_as = { name = death_rattle value = flag:killed_by_best_friend } } ## killed_by_nemesis else_if = { limit = { has_relation_nemesis = scope:sc_victor } save_scope_value_as = { name = death_rattle value = flag:killed_by_nemesis } } ## killed_by_close_or_extended_family else_if = { limit = { any_close_or_extended_family_member = { this = scope:sc_victor } } save_scope_value_as = { name = death_rattle value = flag:killed_by_close_or_extended_family } } ## is sinner else_if = { limit = { num_sinful_traits >= 3 piety_level <= 0 } save_scope_value_as = { name = death_rattle value = flag:sinner } } ## is saint else_if = { limit = { num_virtuous_traits >= 3 piety_level >= 5 } save_scope_value_as = { name = death_rattle value = flag:saint } } ## is legend else_if = { limit = { prestige_level >= 5 NOT = { has_trait = humble } } save_scope_value_as = { name = death_rattle value = flag:legend } } ## killed_by_rival else_if = { limit = { has_relation_rival = scope:sc_victor } save_scope_value_as = { name = death_rattle value = flag:killed_by_rival } } ## killed_by_friend_or_lover else_if = { limit = { OR = { has_relation_friend = scope:sc_victor has_relation_lover = scope:sc_victor } } save_scope_value_as = { name = death_rattle value = flag:killed_by_friend_or_lover } } ## killed_by_spouse else_if = { limit = { any_spouse = { this = scope:sc_victor } } save_scope_value_as = { name = death_rattle value = flag:killed_by_spouse } } ## killed_by_your_head_of_faith else_if = { limit = { faith.religious_head = scope:sc_victor } save_scope_value_as = { name = death_rattle value = flag:killed_by_your_head_of_faith } } ## killed_by_another_head_of_faith else_if = { limit = { faith.religious_head != scope:sc_victor scope:sc_victor.faith.religious_head = scope:sc_victor } save_scope_value_as = { name = death_rattle value = flag:killed_by_another_head_of_faith } } ## killed_by_cultural_head else_if = { limit = { culture.culture_head = scope:sc_victor } save_scope_value_as = { name = death_rattle value = flag:killed_by_cultural_head } } ## killed_by_house_head else_if = { limit = { house.house_head = scope:sc_victor } save_scope_value_as = { name = death_rattle value = flag:killed_by_house_head } } ## killed_by_dynasty_head else_if = { limit = { dynasty.dynast = scope:sc_victor } save_scope_value_as = { name = death_rattle value = flag:killed_by_dynasty_head } } ## believes in valhalla else_if = { limit = { # Specific to Germanic pagans. religion = religion:germanic_religion # And they gotta be warlike. faith = { OR = { has_doctrine_parameter = warmonger has_doctrine_parameter = conquest_cb_enabled has_doctrine_parameter = invasion_cb_enabled has_doctrine_parameter = great_holy_wars_active_if_reformed has_doctrine_parameter = clergy_can_fight has_doctrine_parameter = cheaper_holy_wars_active has_doctrine_parameter = great_holy_wars_active } } } save_scope_value_as = { name = death_rattle value = flag:valhalla } } # Otherwise, we default to the fallback. ## scream else = { save_scope_value_as = { name = death_rattle value = flag:scream } } } } # Send out results events. ## We do this before death calculation so that the loser isn't too dead to be told that they've died (if they died). scope:sc_loser = { trigger_event = single_combat.0031 } scope:sc_victor = { trigger_event = single_combat.0041 } # Setup for artifact.4080 scope:sc_victor = { if = { limit = { any_character_artifact = { is_equipped = yes artifact_slot_type = primary_armament NOT = { has_variable = artifact_duel_var } } } random_character_artifact = { limit = { is_equipped = yes artifact_slot_type = primary_armament NOT = { has_variable = artifact_duel_var } } set_variable = { name = artifact_duel_var value = 1 } } } else_if = { limit = { any_character_artifact = { is_equipped = yes artifact_slot_type = primary_armament has_variable = artifact_duel_var } } random_character_artifact = { limit = { is_equipped = yes artifact_slot_type = primary_armament has_variable = artifact_duel_var } change_variable = { name = artifact_duel_var add = 1 } } } # Legend seed setup if = { limit = { scope:sc_loser = { OR = { highest_held_title_tier >= tier_empire any_held_title = { is_head_of_faith = yes } mpo_has_greatest_of_khans_nickname_trigger = yes } } has_dlc_feature = legends NOT = { has_game_rule = historical_legends_only } } create_legend_seed = { type = heroic quality = illustrious chronicle = legendary_battle properties = { winner = root loser = scope:sc_loser location = root.location } } } } # Sort glory allocation. scope:sc_victor = { if = { limit = { accolade ?= { is_accolade_active = yes } } # Glory is relative to the prowess difference between two characters. Beating someone equally matched or better is worth more. ## Massively outclassed. if = { limit = { prowess_diff = { target = scope:sc_loser value <= -20 } } accolade = { add_glory = monumental_glory_gain } } ## Majorly outclassed. else_if = { limit = { prowess_diff = { target = scope:sc_loser value <= -15 } } accolade = { add_glory = massive_glory_gain } } ## Somewhat outclassed. else_if = { limit = { prowess_diff = { target = scope:sc_loser value <= -8 } } accolade = { add_glory = major_glory_gain } } ## Slightly outclassed. else_if = { limit = { prowess_diff = { target = scope:sc_loser value <= -4 } } accolade = { add_glory = medium_glory_gain } } ## Evenly matched. else_if = { limit = { prowess_diff = { target = scope:sc_loser value <= 0 } } accolade = { add_glory = minor_glory_gain } } ## Slightly in your favour. else_if = { limit = { prowess_diff = { target = scope:sc_loser value <= 4 } } accolade = { add_glory = minimal_glory_gain } } ## Below this, things are too much in your favour and you're not earning glory, you're defending what you already have. #Beating your rival means additional glory gain if = { limit = { OR = { has_relation_rival = scope:sc_loser has_relation_nemesis = scope:sc_loser } } accolade = { add_glory = minor_glory_gain } } } } # Calculate wounds/death; we use an effect so that we can show it as a tooltip elsewhere. work_out_wounds_or_death_effect = yes # Send the final output event & clean up. remove_single_combat_info_effect = yes scope:sc_defender = { if = { limit = { is_alive = yes } remove_variable = engaged_in_single_combat } } scope:sc_attacker = { if = { limit = { is_alive = yes } remove_variable = engaged_in_single_combat } } ## We use the initiator if they're alive... if = { limit = { scope:sc_initiator = { is_alive = yes } } scope:sc_initiator = { trigger_event = { saved_event_id = scope:follow_up_event } } } ## Or otherwise the other person. ### Doesn't hugely matter, technically, since the output event should be from a neutral scope, but if they're dead then the event won't fire and the chain silently invalidates. else_if = { limit = { scope:sc_defender = { is_alive = yes } } scope:sc_defender = { trigger_event = { saved_event_id = scope:follow_up_event } } } else = { scope:sc_attacker = { trigger_event = { saved_event_id = scope:follow_up_event } } } } # Determine the current chances for either party to injure themselves _before_ the next move is made. scripted_effect calculate_injury_risks_effect = { scope:sc_attacker = { set_variable = { name = sc_attacker_injury_risk_check value = { value = scope:sc_attacker.var:sc_attacker_injury_risk_score add = scope:sc_attacker.var:sc_attacker_injury_bonus } } } scope:sc_defender = { set_variable = { name = sc_defender_injury_risk_check value = { value = scope:sc_defender.var:sc_defender_injury_risk_score add = scope:sc_defender.var:sc_defender_injury_bonus } } } } # Determine which of the two parties, if either, is currently closest to winning the single combat via skill. scripted_effect calculate_success_chances_effect = { scope:sc_attacker = { set_variable = { name = sc_attacker_success_check value = { value = scope:sc_attacker.var:sc_attacker_duel_success_score subtract = scope:sc_defender.var:sc_defender_duel_success_score } } } scope:sc_defender = { set_variable = { name = sc_defender_success_check value = { value = scope:sc_defender.var:sc_defender_duel_success_score subtract = scope:sc_attacker.var:sc_attacker_duel_success_score } } } } ################################################## # COMBAT MOVE SCRIPTED EFFECTS # Update the results of the current combat move. scripted_effect adjust_risk_reward_effect = { # Adjust scope:sc_attacker's scores if we're looking at them. if = { limit = { this = scope:sc_attacker } change_variable = { name = sc_attacker_injury_risk_score add = $INJURY_RISK$ } change_variable = { name = sc_attacker_duel_success_score add = $DUEL_SUCCESS$ } } # Adjust scope:sc_defender's scores if we're looking at them. if = { limit = { this = scope:sc_defender } change_variable = { name = sc_defender_injury_risk_score add = $INJURY_RISK$ } change_variable = { name = sc_defender_duel_success_score add = $DUEL_SUCCESS$ } } # Inform the current scope about how this will impact duel_success_score. if = { limit = { $DUEL_SUCCESS$ = duel_success_none } # If this is a past tense tooltip, refer to scope:my_foe grammatically. if = { limit = { this = scope:my_foe } custom_tooltip = single_combat.0001.duel_success.none.has_happened } # Otherwise, we do it from first person. else = { custom_tooltip = single_combat.0001.duel_success.none } } else_if = { limit = { $DUEL_SUCCESS$ = duel_success_low } # If this is a past tense tooltip, refer to scope:my_foe grammatically. if = { limit = { this = scope:my_foe } custom_tooltip = single_combat.0001.duel_success.low.has_happened } # Otherwise, we do it from first person. else = { custom_tooltip = single_combat.0001.duel_success.low } } else_if = { limit = { $DUEL_SUCCESS$ = duel_success_medium } # If this is a past tense tooltip, refer to scope:my_foe grammatically. if = { limit = { this = scope:my_foe } custom_tooltip = single_combat.0001.duel_success.medium.has_happened } # Otherwise, we do it from first person. else = { custom_tooltip = single_combat.0001.duel_success.medium } } else_if = { limit = { $DUEL_SUCCESS$ = duel_success_high } # If this is a past tense tooltip, refer to scope:my_foe grammatically. if = { limit = { this = scope:my_foe } custom_tooltip = single_combat.0001.duel_success.high.has_happened } # Otherwise, we do it from first person. else = { custom_tooltip = single_combat.0001.duel_success.high } } else_if = { limit = { $DUEL_SUCCESS$ = duel_success_very_high } # If this is a past tense tooltip, refer to scope:my_foe grammatically. if = { limit = { this = scope:my_foe } custom_tooltip = single_combat.0001.duel_success.very_high.has_happened } # Otherwise, we do it from first person. else = { custom_tooltip = single_combat.0001.duel_success.very_high } } # Aaaand finally tell current scope how this'll impact injury_risk_score. if = { limit = { $INJURY_RISK$ = injury_risk_none } # If this is a past tense tooltip, refer to scope:my_foe grammatically. if = { limit = { this = scope:my_foe } custom_tooltip = single_combat.0001.injury.none.has_happened } # Otherwise, we do it from first person. else = { custom_tooltip = single_combat.0001.injury.none } } else_if = { limit = { $INJURY_RISK$ = injury_risk_low } # If this is a past tense tooltip, refer to scope:my_foe grammatically. if = { limit = { this = scope:my_foe } custom_tooltip = single_combat.0001.injury.low.has_happened } # Otherwise, we do it from first person. else = { custom_tooltip = single_combat.0001.injury.low } } else_if = { limit = { $INJURY_RISK$ = injury_risk_medium } # If this is a past tense tooltip, refer to scope:my_foe grammatically. if = { limit = { this = scope:my_foe } custom_tooltip = single_combat.0001.injury.medium.has_happened } # Otherwise, we do it from first person. else = { custom_tooltip = single_combat.0001.injury.medium } } else_if = { limit = { $INJURY_RISK$ = injury_risk_high } # If this is a past tense tooltip, refer to scope:my_foe grammatically. if = { limit = { this = scope:my_foe } custom_tooltip = single_combat.0001.injury.high.has_happened } # Otherwise, we do it from first person. else = { custom_tooltip = single_combat.0001.injury.high } } else_if = { limit = { $INJURY_RISK$ = injury_risk_very_high } # If this is a past tense tooltip, refer to scope:my_foe grammatically. if = { limit = { this = scope:my_foe } custom_tooltip = single_combat.0001.injury.very_high.has_happened } # Otherwise, we do it from first person. else = { custom_tooltip = single_combat.0001.injury.very_high } } } # Add positive prowess character modifiers from the current move. scripted_effect increment_combat_buffs_effect = { # Determine what our current level of combat buff is. ## Hidden effect for easy folding & readability. hidden_effect = { if = { limit = { NOR = { has_character_modifier = duel_edge_buff_01_modifier has_character_modifier = duel_edge_buff_02_modifier has_character_modifier = duel_edge_buff_03_modifier has_character_modifier = duel_edge_buff_04_modifier has_character_modifier = duel_edge_buff_05_modifier has_character_modifier = duel_edge_buff_06_modifier has_character_modifier = duel_edge_buff_07_modifier has_character_modifier = duel_edge_buff_08_modifier has_character_modifier = duel_edge_buff_09_modifier has_character_modifier = duel_edge_buff_10_modifier has_character_modifier = duel_edge_buff_11_modifier has_character_modifier = duel_edge_buff_12_modifier has_character_modifier = duel_edge_buff_13_modifier has_character_modifier = duel_edge_buff_14_modifier has_character_modifier = duel_edge_buff_15_modifier has_character_modifier = duel_edge_buff_16_modifier has_character_modifier = duel_edge_buff_17_modifier has_character_modifier = duel_edge_buff_18_modifier has_character_modifier = duel_edge_buff_19_modifier has_character_modifier = duel_edge_buff_20_modifier has_character_modifier = duel_edge_buff_21_modifier has_character_modifier = duel_edge_buff_22_modifier has_character_modifier = duel_edge_buff_23_modifier has_character_modifier = duel_edge_buff_24_modifier has_character_modifier = duel_edge_buff_25_modifier has_character_modifier = duel_edge_buff_26_modifier has_character_modifier = duel_edge_buff_27_modifier has_character_modifier = duel_edge_buff_28_modifier has_character_modifier = duel_edge_buff_29_modifier has_character_modifier = duel_edge_buff_30_modifier } } set_local_variable = { name = current_duel_edge_buff value = 0 } } else_if = { limit = { has_character_modifier = duel_edge_buff_01_modifier } set_local_variable = { name = current_duel_edge_buff value = 1 } } else_if = { limit = { has_character_modifier = duel_edge_buff_02_modifier } set_local_variable = { name = current_duel_edge_buff value = 2 } } else_if = { limit = { has_character_modifier = duel_edge_buff_03_modifier } set_local_variable = { name = current_duel_edge_buff value = 3 } } else_if = { limit = { has_character_modifier = duel_edge_buff_04_modifier } set_local_variable = { name = current_duel_edge_buff value = 4 } } else_if = { limit = { has_character_modifier = duel_edge_buff_05_modifier } set_local_variable = { name = current_duel_edge_buff value = 5 } } else_if = { limit = { has_character_modifier = duel_edge_buff_06_modifier } set_local_variable = { name = current_duel_edge_buff value = 6 } } else_if = { limit = { has_character_modifier = duel_edge_buff_07_modifier } set_local_variable = { name = current_duel_edge_buff value = 7 } } else_if = { limit = { has_character_modifier = duel_edge_buff_08_modifier } set_local_variable = { name = current_duel_edge_buff value = 8 } } else_if = { limit = { has_character_modifier = duel_edge_buff_09_modifier } set_local_variable = { name = current_duel_edge_buff value = 9 } } else_if = { limit = { has_character_modifier = duel_edge_buff_10_modifier } set_local_variable = { name = current_duel_edge_buff value = 10 } } else_if = { limit = { has_character_modifier = duel_edge_buff_11_modifier } set_local_variable = { name = current_duel_edge_buff value = 11 } } else_if = { limit = { has_character_modifier = duel_edge_buff_12_modifier } set_local_variable = { name = current_duel_edge_buff value = 12 } } else_if = { limit = { has_character_modifier = duel_edge_buff_13_modifier } set_local_variable = { name = current_duel_edge_buff value = 13 } } else_if = { limit = { has_character_modifier = duel_edge_buff_14_modifier } set_local_variable = { name = current_duel_edge_buff value = 14 } } else_if = { limit = { has_character_modifier = duel_edge_buff_15_modifier } set_local_variable = { name = current_duel_edge_buff value = 15 } } else_if = { limit = { has_character_modifier = duel_edge_buff_16_modifier } set_local_variable = { name = current_duel_edge_buff value = 16 } } else_if = { limit = { has_character_modifier = duel_edge_buff_17_modifier } set_local_variable = { name = current_duel_edge_buff value = 17 } } else_if = { limit = { has_character_modifier = duel_edge_buff_18_modifier } set_local_variable = { name = current_duel_edge_buff value = 18 } } else_if = { limit = { has_character_modifier = duel_edge_buff_19_modifier } set_local_variable = { name = current_duel_edge_buff value = 19 } } else_if = { limit = { has_character_modifier = duel_edge_buff_20_modifier } set_local_variable = { name = current_duel_edge_buff value = 20 } } else_if = { limit = { has_character_modifier = duel_edge_buff_21_modifier } set_local_variable = { name = current_duel_edge_buff value = 21 } } else_if = { limit = { has_character_modifier = duel_edge_buff_22_modifier } set_local_variable = { name = current_duel_edge_buff value = 22 } } else_if = { limit = { has_character_modifier = duel_edge_buff_23_modifier } set_local_variable = { name = current_duel_edge_buff value = 23 } } else_if = { limit = { has_character_modifier = duel_edge_buff_24_modifier } set_local_variable = { name = current_duel_edge_buff value = 24 } } else_if = { limit = { has_character_modifier = duel_edge_buff_25_modifier } set_local_variable = { name = current_duel_edge_buff value = 25 } } else_if = { limit = { has_character_modifier = duel_edge_buff_26_modifier } set_local_variable = { name = current_duel_edge_buff value = 26 } } else_if = { limit = { has_character_modifier = duel_edge_buff_27_modifier } set_local_variable = { name = current_duel_edge_buff value = 27 } } else_if = { limit = { has_character_modifier = duel_edge_buff_28_modifier } set_local_variable = { name = current_duel_edge_buff value = 28 } } else_if = { limit = { has_character_modifier = duel_edge_buff_29_modifier } set_local_variable = { name = current_duel_edge_buff value = 29 } } else_if = { limit = { has_character_modifier = duel_edge_buff_30_modifier } set_local_variable = { name = current_duel_edge_buff value = 30 } #Show a tooltip in case the character is overflowing at max buff. custom_tooltip = single_combat.0001.tt.maximum_buff_reached } } # Grab the amount we want to add and change the combat modifier accordingly. change_local_variable = { name = current_duel_edge_buff add = $BUFF_INCREMENT$ } # Remove any existing duel edge buffs. hidden_effect = { remove_temporary_duel_edge_buff_modifiers_effect = yes } # Add the buff corresponding to our new level of edge. if = { limit = { local_var:current_duel_edge_buff = 1 } add_character_modifier = duel_edge_buff_01_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 2 } add_character_modifier = duel_edge_buff_02_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 3 } add_character_modifier = duel_edge_buff_03_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 4 } add_character_modifier = duel_edge_buff_04_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 5 } add_character_modifier = duel_edge_buff_05_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 6 } add_character_modifier = duel_edge_buff_06_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 7 } add_character_modifier = duel_edge_buff_07_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 8 } add_character_modifier = duel_edge_buff_08_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 9 } add_character_modifier = duel_edge_buff_09_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 10 } add_character_modifier = duel_edge_buff_10_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 11 } add_character_modifier = duel_edge_buff_11_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 12 } add_character_modifier = duel_edge_buff_12_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 13 } add_character_modifier = duel_edge_buff_13_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 14 } add_character_modifier = duel_edge_buff_14_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 15 } add_character_modifier = duel_edge_buff_15_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 16 } add_character_modifier = duel_edge_buff_16_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 17 } add_character_modifier = duel_edge_buff_17_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 18 } add_character_modifier = duel_edge_buff_18_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 19 } add_character_modifier = duel_edge_buff_19_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 20 } add_character_modifier = duel_edge_buff_20_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 21 } add_character_modifier = duel_edge_buff_21_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 22 } add_character_modifier = duel_edge_buff_22_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 23 } add_character_modifier = duel_edge_buff_23_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 24 } add_character_modifier = duel_edge_buff_24_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 25 } add_character_modifier = duel_edge_buff_25_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 26 } add_character_modifier = duel_edge_buff_26_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 27 } add_character_modifier = duel_edge_buff_27_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 28 } add_character_modifier = duel_edge_buff_28_modifier } else_if = { limit = { local_var:current_duel_edge_buff = 29 } add_character_modifier = duel_edge_buff_29_modifier } else_if = { limit = { local_var:current_duel_edge_buff >= 30 } add_character_modifier = duel_edge_buff_30_modifier #Show a tooltip in case the character is overflowing at max buff. custom_tooltip = single_combat.0001.tt.maximum_buff_reached } # Finally, note that the character needs a stats recalc. add_character_flag = sce_needs_forced_recalc_flag } # Add negative prowess character modifiers from the current move. scripted_effect increment_combat_debuffs_effect = { # Determine what our current level of combat buff is. ## Hidden effect for easy folding & readability. hidden_effect = { if = { limit = { NOR = { has_character_modifier = duel_edge_debuff_01_modifier has_character_modifier = duel_edge_debuff_02_modifier has_character_modifier = duel_edge_debuff_03_modifier has_character_modifier = duel_edge_debuff_04_modifier has_character_modifier = duel_edge_debuff_05_modifier has_character_modifier = duel_edge_debuff_06_modifier has_character_modifier = duel_edge_debuff_07_modifier has_character_modifier = duel_edge_debuff_08_modifier has_character_modifier = duel_edge_debuff_09_modifier has_character_modifier = duel_edge_debuff_10_modifier has_character_modifier = duel_edge_debuff_11_modifier has_character_modifier = duel_edge_debuff_12_modifier has_character_modifier = duel_edge_debuff_13_modifier has_character_modifier = duel_edge_debuff_14_modifier has_character_modifier = duel_edge_debuff_15_modifier has_character_modifier = duel_edge_debuff_16_modifier has_character_modifier = duel_edge_debuff_17_modifier has_character_modifier = duel_edge_debuff_18_modifier has_character_modifier = duel_edge_debuff_19_modifier has_character_modifier = duel_edge_debuff_20_modifier has_character_modifier = duel_edge_debuff_21_modifier has_character_modifier = duel_edge_debuff_22_modifier has_character_modifier = duel_edge_debuff_23_modifier has_character_modifier = duel_edge_debuff_24_modifier has_character_modifier = duel_edge_debuff_25_modifier has_character_modifier = duel_edge_debuff_26_modifier has_character_modifier = duel_edge_debuff_27_modifier has_character_modifier = duel_edge_debuff_28_modifier has_character_modifier = duel_edge_debuff_29_modifier has_character_modifier = duel_edge_debuff_30_modifier } } set_local_variable = { name = current_duel_edge_debuff value = 0 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_01_modifier } set_local_variable = { name = current_duel_edge_debuff value = 1 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_02_modifier } set_local_variable = { name = current_duel_edge_debuff value = 2 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_03_modifier } set_local_variable = { name = current_duel_edge_debuff value = 3 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_04_modifier } set_local_variable = { name = current_duel_edge_debuff value = 4 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_05_modifier } set_local_variable = { name = current_duel_edge_debuff value = 5 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_06_modifier } set_local_variable = { name = current_duel_edge_debuff value = 6 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_07_modifier } set_local_variable = { name = current_duel_edge_debuff value = 7 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_08_modifier } set_local_variable = { name = current_duel_edge_debuff value = 8 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_09_modifier } set_local_variable = { name = current_duel_edge_debuff value = 9 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_10_modifier } set_local_variable = { name = current_duel_edge_debuff value = 10 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_11_modifier } set_local_variable = { name = current_duel_edge_debuff value = 11 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_12_modifier } set_local_variable = { name = current_duel_edge_debuff value = 12 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_13_modifier } set_local_variable = { name = current_duel_edge_debuff value = 13 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_14_modifier } set_local_variable = { name = current_duel_edge_debuff value = 14 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_15_modifier } set_local_variable = { name = current_duel_edge_debuff value = 15 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_16_modifier } set_local_variable = { name = current_duel_edge_debuff value = 16 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_17_modifier } set_local_variable = { name = current_duel_edge_debuff value = 17 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_18_modifier } set_local_variable = { name = current_duel_edge_debuff value = 18 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_19_modifier } set_local_variable = { name = current_duel_edge_debuff value = 19 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_20_modifier } set_local_variable = { name = current_duel_edge_debuff value = 20 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_21_modifier } set_local_variable = { name = current_duel_edge_debuff value = 21 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_22_modifier } set_local_variable = { name = current_duel_edge_debuff value = 22 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_23_modifier } set_local_variable = { name = current_duel_edge_debuff value = 23 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_24_modifier } set_local_variable = { name = current_duel_edge_debuff value = 24 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_25_modifier } set_local_variable = { name = current_duel_edge_debuff value = 25 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_26_modifier } set_local_variable = { name = current_duel_edge_debuff value = 26 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_27_modifier } set_local_variable = { name = current_duel_edge_debuff value = 27 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_28_modifier } set_local_variable = { name = current_duel_edge_debuff value = 28 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_29_modifier } set_local_variable = { name = current_duel_edge_debuff value = 29 } } else_if = { limit = { has_character_modifier = duel_edge_debuff_30_modifier } set_local_variable = { name = current_duel_edge_debuff value = 30 } #Show a tooltip in case the character is overflowing at max buff. custom_tooltip = single_combat.0001.tt.maximum_debuff_reached } } # Grab the amount we want to add and change the combat modifier accordingly. change_local_variable = { name = current_duel_edge_debuff add = $DEBUFF_INCREMENT$ } # Remove any existing duel edge buffs. hidden_effect = { remove_temporary_duel_edge_debuff_modifiers_effect = yes } # Add the buff corresponding to our new level of edge. if = { limit = { local_var:current_duel_edge_debuff = 1 } add_character_modifier = duel_edge_debuff_01_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 2 } add_character_modifier = duel_edge_debuff_02_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 3 } add_character_modifier = duel_edge_debuff_03_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 4 } add_character_modifier = duel_edge_debuff_04_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 5 } add_character_modifier = duel_edge_debuff_05_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 6 } add_character_modifier = duel_edge_debuff_06_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 7 } add_character_modifier = duel_edge_debuff_07_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 8 } add_character_modifier = duel_edge_debuff_08_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 9 } add_character_modifier = duel_edge_debuff_09_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 10 } add_character_modifier = duel_edge_debuff_10_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 11 } add_character_modifier = duel_edge_debuff_11_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 12 } add_character_modifier = duel_edge_debuff_12_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 13 } add_character_modifier = duel_edge_debuff_13_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 14 } add_character_modifier = duel_edge_debuff_14_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 15 } add_character_modifier = duel_edge_debuff_15_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 16 } add_character_modifier = duel_edge_debuff_16_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 17 } add_character_modifier = duel_edge_debuff_17_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 18 } add_character_modifier = duel_edge_debuff_18_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 19 } add_character_modifier = duel_edge_debuff_19_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 20 } add_character_modifier = duel_edge_debuff_20_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 21 } add_character_modifier = duel_edge_debuff_21_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 22 } add_character_modifier = duel_edge_debuff_22_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 23 } add_character_modifier = duel_edge_debuff_23_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 24 } add_character_modifier = duel_edge_debuff_24_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 25 } add_character_modifier = duel_edge_debuff_25_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 26 } add_character_modifier = duel_edge_debuff_26_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 27 } add_character_modifier = duel_edge_debuff_27_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 28 } add_character_modifier = duel_edge_debuff_28_modifier } else_if = { limit = { local_var:current_duel_edge_debuff = 29 } add_character_modifier = duel_edge_debuff_29_modifier } else_if = { limit = { local_var:current_duel_edge_debuff >= 30 } add_character_modifier = duel_edge_debuff_30_modifier #Show a tooltip in case the character is overflowing at max buff. custom_tooltip = single_combat.0001.tt.maximum_debuff_reached } # Finally, note that the character needs a stats recalc. add_character_flag = sce_needs_forced_recalc_flag } # Tier One move effects scripted_effect combat_move_wait_and_hope_effect = { #No special effects. #Iterate last move for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:wait_and_hope } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:wait_and_hope } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_low } } scripted_effect combat_move_unsure_attack_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:unsure_attack } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:unsure_attack } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_high DUEL_SUCCESS = duel_success_medium } } scripted_effect combat_move_enthusiastic_onslaught_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:enthusiastic_onslaught } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:enthusiastic_onslaught } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_very_high DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_hail_mary_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:hail_mary } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:hail_mary } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_high DUEL_SUCCESS = duel_success_very_high } } scripted_effect combat_move_pocket_sand_effect = { # Your opponent gets grit in their eyes! ## Scope:sc_attacker first. if = { limit = { this = scope:sc_attacker } scope:sc_defender = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 4 } } } ## Then scope:sc_defender. if = { limit = { this = scope:sc_defender } scope:sc_attacker = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 4 } } } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:pocket_sand } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:pocket_sand } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_none } } scripted_effect combat_move_nut_em_effect = { # A headbutt to the face often offends. Both parties, really. scope:sc_attacker = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 4 } } scope:sc_defender = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 4 } } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:nut_em } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:nut_em } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_high DUEL_SUCCESS = duel_success_medium } } # Tier Two move effects scripted_effect combat_move_guard_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:guard } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:guard } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_low } } scripted_effect combat_move_probing_attack_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:probing_attack } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:probing_attack } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_medium } } scripted_effect combat_move_onslaught_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:onslaught } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:onslaught } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_high DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_surprise_attack_effect = { #Special effects taken care of in risk-reward section. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:surprise_attack } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:surprise_attack } } #And adjust risk-reward scores. if = { limit = { OR = { AND = { this = scope:sc_attacker scope:sc_defender = { has_trait = trusting } } AND = { this = scope:sc_defender scope:sc_attacker = { has_trait = trusting } } } } adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_very_high } } else = { random_list = { 33 = { adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_low } } 34 = { adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_medium } } 33 = { adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_high } } } } } scripted_effect combat_move_taunt_effect = { #Your AI opponent becomes enraged. if = { limit = { this = scope:sc_attacker } scope:sc_defender = { add_character_modifier = { modifier = combat_move_taunt_modifier } } } if = { limit = { this = scope:sc_defender } scope:sc_attacker = { add_character_modifier = { modifier = combat_move_taunt_modifier } } } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:taunt } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:taunt } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_none } } scripted_effect combat_move_put_the_boot_in_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:put_the_boot_in } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:put_the_boot_in } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_very_high DUEL_SUCCESS = duel_success_very_high } } # Tier Three move effects scripted_effect combat_move_strict_guard_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:strict_guard } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:strict_guard } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_none DUEL_SUCCESS = duel_success_low } } scripted_effect combat_move_confident_attack_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:confident_attack } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:confident_attack } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_medium } } scripted_effect combat_move_expert_onslaught_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:expert_onslaught } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:expert_onslaught } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_attempt_disarm_effect = { # You attempt to disarm your opponent, making their grip on their weapon shaky. ## Scope:sc_attacker first. if = { limit = { this = scope:sc_attacker } scope:sc_defender = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 6 } } } ## Then scope:sc_defender. if = { limit = { this = scope:sc_defender } scope:sc_attacker = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 6 } } } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:attempt_disarm } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:attempt_disarm } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_low } } scripted_effect combat_move_lightning_assault_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:lightning_assault } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:lightning_assault } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_high DUEL_SUCCESS = duel_success_very_high } } scripted_effect combat_move_tire_opponent_effect = { # Drastically improve your own wound threshold due to relative tiredness. if = { limit = { this = scope:sc_attacker } change_variable = { name = sc_attacker_injury_risk_score add = combat_move_wound_threshold_bonus_2 } custom_tooltip = single_combat.0001.wound_threshold.medium_bonus.tt } if = { limit = { this = scope:sc_defender } change_variable = { name = sc_defender_injury_risk_score add = combat_move_wound_threshold_bonus_2 } custom_tooltip = single_combat.0001.wound_threshold.medium_bonus.tt } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:tire_opponent } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:tire_opponent } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_none DUEL_SUCCESS = duel_success_low } } # High Secondary Skill move effects scripted_effect combat_move_reason_you_suck_speech_effect = { # Explain, at length, why your opponent is a cad & you're rad. add_prestige = combat_move_reason_you_suck_speech_value #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:reason_you_suck_speech } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:reason_you_suck_speech } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_none } } scripted_effect combat_move_technique_from_legend_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:technique_from_legend } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:technique_from_legend } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_like_a_viper_effect = { # Drastically reduce your opponent's wound threshold by off-balancing them. if = { limit = { this = scope:sc_attacker } scope:sc_defender = { change_variable = { name = sc_defender_injury_risk_score add = combat_move_wound_threshold_malus_2 } } custom_tooltip = single_combat.0001.wound_threshold.medium_malus.tt } if = { limit = { this = scope:sc_defender } scope:sc_attacker = { change_variable = { name = sc_attacker_injury_risk_score add = combat_move_wound_threshold_malus_2 } } custom_tooltip = single_combat.0001.wound_threshold.medium_malus.tt } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:like_a_viper } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:like_a_viper } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_pocket_silver_effect = { # You fling a purse of silver right at your opponent's face. ## We deliberately don't use pay_short_term_gold, since that'll read weirdly to the player. if = { limit = { this = scope:sc_attacker } remove_short_term_gold = combat_move_pocket_silver_value scope:sc_defender = { add_gold = combat_move_pocket_silver_value } } if = { limit = { this = scope:sc_defender } remove_short_term_gold = combat_move_pocket_silver_value scope:sc_attacker = { add_gold = combat_move_pocket_silver_value } } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:pocket_silver } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:pocket_silver } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_none DUEL_SUCCESS = duel_success_medium } } scripted_effect combat_move_martial_voice_effect = { # You go drill sergeant on your opponent. ## Scope:sc_attacker first. if = { limit = { this = scope:sc_attacker } scope:sc_defender = { # Arrogant characters are a bit less susceptible to this. if = { limit = { has_trait = arrogant } increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 2 } } else = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 4 } } } } ## Then we look at scope:sc_defender. else_if = { limit = { this = scope:sc_defender } scope:sc_attacker = { # Arrogant characters are a bit less susceptible to this. if = { limit = { has_trait = arrogant } increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 2 } } else = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 4 } } } } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:martial_voice } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:martial_voice } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_none } } scripted_effect combat_move_mocking_boast_effect = { # Your opponent takes +4 levels of combat debuffs, and some stress. ## Scope:sc_attacker first. if = { limit = { this = scope:sc_attacker } scope:sc_defender = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 2 } # Arrogant characters are a bit more susceptible. if = { limit = { has_trait = arrogant } add_stress = medium_stress_gain } else = { add_stress = minor_stress_gain } } } ## Then we look at scope:sc_defender. else_if = { limit = { this = scope:sc_defender } scope:sc_attacker = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 2 } # Arrogant characters are a bit more susceptible. if = { limit = { has_trait = arrogant } add_stress = medium_stress_gain } else = { add_stress = minor_stress_gain } } } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:mocking_boast } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:mocking_boast } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_none DUEL_SUCCESS = duel_success_none } } # Location-Specific move effects scripted_effect combat_move_is_that_a_crocodile_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:is_that_a_crocodile } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:is_that_a_crocodile } } # Maximum of one crocodile per fight. save_scope_value_as = { name = had_crocodile value = yes } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_none DUEL_SUCCESS = duel_success_very_high } } scripted_effect combat_move_desert_warrior_effect = { #Add +2 ranks of combat buff. increment_combat_buffs_effect = { BUFF_INCREMENT = 2 } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:desert_warrior } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:desert_warrior } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_jungle_stalker_effect = { #Add +2 ranks of combat buff. increment_combat_buffs_effect = { BUFF_INCREMENT = 2 } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:jungle_stalker } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:jungle_stalker } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_open_terrain_expert_effect = { #Add +2 ranks of combat buff. increment_combat_buffs_effect = { BUFF_INCREMENT = 2 } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:open_terrain_expert } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:open_terrain_expert } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_rough_terrain_expert_effect = { #Add +2 ranks of combat buff. increment_combat_buffs_effect = { BUFF_INCREMENT = 2 } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:rough_terrain_expert } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:rough_terrain_expert } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_forest_fighter_effect = { #Add +2 ranks of combat buff. increment_combat_buffs_effect = { BUFF_INCREMENT = 2 } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:forest_fighter } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:forest_fighter } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_high } } # Trait-Specific move effects scripted_effect combat_move_raaargh_effect = { #Going berserk is a major stress relief. add_stress = medium_stress_loss #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:raaargh } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:raaargh } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_very_high } } scripted_effect combat_move_hard_grit_effect = { #Add +4 ranks of combat buff. increment_combat_buffs_effect = { BUFF_INCREMENT = 4 } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:hard_grit } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:hard_grit } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_none DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_feint_and_stab_effect = { # Quick-thinking is a habit. add_character_modifier = { modifier = combat_move_feint_and_stab_modifier years = 5 } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:feint_and_stab } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:feint_and_stab } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_butchery_effect = { # Show people what happens when they mess with you. add_dread = combat_move_butchery_dread_value #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:butchery } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:butchery } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_high } } scripted_effect combat_move_stoic_veteran_effect = { # You didn't die in Miklagard, you won't die here, you won't even die soon. add_character_modifier = { modifier = combat_move_stoic_veteran_modifier years = 5 } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:stoic_veteran } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:stoic_veteran } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_none DUEL_SUCCESS = duel_success_medium } } scripted_effect combat_move_blade_dance_effect = { # Show off your skill with the blade. add_prestige = combat_move_blade_dance_value #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:blade_dance } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:blade_dance } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_high } } ## Not a separate combat move, just an effect inside the subsequent one. scripted_effect combat_move_wrath_of_highgod_piety_reward_effect = { # Non-scripted values used to keep the piety amount low; you might take this option several times in one duel, so we don't really want you to be farming piety from it. # Righteous faiths give little piety if = { limit = { faith = { faith_hostility_level = { target = $MY_FOE$.faith value = faith_fully_accepted_level } } } add_piety = 10 } # Astray faiths are a bit further from the light else_if = { limit = { faith = { faith_hostility_level = { target = $MY_FOE$.faith value = faith_astray_level } } } add_piety = 25 } # Hostile faiths make HighGod sit up and take notice else_if = { limit = { faith = { faith_hostility_level = { target = $MY_FOE$.faith value = faith_hostile_level } } } add_piety = 50 } # Evil faiths are actually worth writing home about else_if = { limit = { faith = { faith_hostility_level = { target = $MY_FOE$.faith value = faith_evil_level } } } add_piety = 75 } } scripted_effect combat_move_wrath_of_highgod_effect = { #Earn piety scaling with how intolerant you are of your opponent. if = { limit = { this = scope:sc_attacker } combat_move_wrath_of_highgod_piety_reward_effect = { MY_FOE = scope:sc_defender } } if = { limit = { this = scope:sc_defender } combat_move_wrath_of_highgod_piety_reward_effect = { MY_FOE = scope:sc_attacker } } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:wrath_of_highgod } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:wrath_of_highgod } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_none DUEL_SUCCESS = duel_success_low } } scripted_effect combat_move_hurt_me_better_effect = { # Deviant characters can cancel out their wound penalties, or gain a moderate buff otherwise. if = { limit = { # To cancel out wounded, they must have any wounded trait. has_trait = wounded # And must not have cancelled it out already. NOR = { has_character_modifier = combat_move_hurt_me_better_wounded_1_modifier has_character_modifier = combat_move_hurt_me_better_wounded_2_modifier has_character_modifier = combat_move_hurt_me_better_wounded_3_modifier } } if = { limit = { has_trait = wounded_1 } add_character_modifier = combat_move_hurt_me_better_wounded_1_modifier } else_if = { limit = { has_trait = wounded_2 } add_character_modifier = combat_move_hurt_me_better_wounded_2_modifier } else_if = { limit = { has_trait = wounded_3 } add_character_modifier = combat_move_hurt_me_better_wounded_3_modifier } } else = { # Otherwise, we just buff their duel edge twice. increment_combat_buffs_effect = { BUFF_INCREMENT = 2 } } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:hurt_me_better } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:hurt_me_better } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_medium DUEL_SUCCESS = duel_success_medium } } # Misc move effects scripted_effect combat_move_special_fallback_effect = { #No special effects. #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:special_fallback } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:special_fallback } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_low DUEL_SUCCESS = duel_success_low } } scripted_effect combat_move_something_to_hide_effect = { # You imply that things might go poorly for your opponent if they don't back down. ## Scope:sc_attacker first. if = { limit = { this = scope:sc_attacker } # If the hook is strong, then add +8 ranks of combat debuff for your opponent. if = { limit = { has_strong_usable_hook = scope:sc_defender } scope:sc_defender = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 8 } } } # Otherwise, we only add +4 ranks. else = { scope:sc_defender = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 4 } } } } ## Then scope:sc_defender. if = { limit = { this = scope:sc_defender } # If the hook is strong, then add +8 ranks of combat debuff for your opponent. if = { limit = { has_strong_usable_hook = scope:sc_attacker } scope:sc_attacker = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 8 } } } # Otherwise, we only add +4 ranks. else = { scope:sc_attacker = { increment_combat_debuffs_effect = { DEBUFF_INCREMENT = 4 } } } } #Change the last move registered for loc purposes. if = { limit = { this = scope:sc_attacker } save_scope_value_as = { name = sc_attacker_last_move value = flag:something_to_hide } } if = { limit = { this = scope:sc_defender } save_scope_value_as = { name = sc_defender_last_move value = flag:something_to_hide } } #And adjust risk-reward scores. adjust_risk_reward_effect = { INJURY_RISK = injury_risk_none DUEL_SUCCESS = duel_success_none } } # Artifact damage effect - input slot type, chance for damage to happen at all, and max possible damage as percent of max possible scripted_effect may_damage_artifact_effect = { if = { limit = { any_equipped_character_artifact = { artifact_slot_type = $TYPE$ } } random_equipped_character_artifact = { limit = { artifact_slot_type = $TYPE$ } random = { chance = $CHANCE$ add_durability = { value = artifact_max_durability multiply = { value = { integer_range = { min = 5 max = $PERCENT$ } } multiply = -0.01 } } } } } } ################################################## # SINGLE COMBAT EVENTS ################################################## # Participant Events # by Ewan Cowhig Croft # 0001 - 0020 ################################################## # Standard combat event. single_combat.0001 = { type = character_event window = duel_event title = { first_valid = { triggered_desc = { trigger = { this = scope:sc_defender } desc = single_combat.0001.t } triggered_desc = { trigger = { this = scope:sc_attacker } desc = single_combat.0011.t } } } desc = { first_valid = { #If we're scope:sc_defender, give us defensive descs. triggered_desc = { trigger = { this = scope:sc_defender } desc = { # First round. ## We just play an intro spiel. triggered_desc = { trigger = { scope:sc_defender.var:current_round = 1 } desc = single_combat.0001.desc.sc_defender.intro } ## Slightly different capstone speeches, depending on how deadly the duel is expected to be. triggered_desc = { trigger = { scope:sc_defender.var:current_round = 1 duel_will_end_in_opponent_death_trigger = no } desc = single_combat.0001.desc.capstone.intro.first_blood } triggered_desc = { trigger = { scope:sc_defender.var:current_round = 1 duel_will_end_in_opponent_death_trigger = yes } desc = single_combat.0001.desc.capstone.intro.deadly } # Scope:sc_defender feedback. ## So you can see a bit of fairly-static feedback on how your selected combat move went. triggered_desc = { trigger = { exists = scope:sc_defender_last_move } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_defender_last_move = flag:wait_and_hope duel_will_end_in_my_death_trigger = yes NOT = { has_trait = brave } } desc = single_combat.0001.desc.my_feedback.wait_and_hope.will_die } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:wait_and_hope OR = { duel_will_end_in_my_death_trigger = no has_trait = brave } } desc = single_combat.0001.desc.my_feedback.wait_and_hope.will_live } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:unsure_attack } desc = single_combat.0001.desc.my_feedback.unsure_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:enthusiastic_onslaught } desc = single_combat.0001.desc.my_feedback.enthusiastic_onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hail_mary } desc = single_combat.0001.desc.my_feedback.hail_mary } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:pocket_sand } desc = single_combat.0001.desc.my_feedback.pocket_sand } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:nut_em } desc = single_combat.0001.desc.my_feedback.nut_em } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:guard } desc = single_combat.0001.desc.my_feedback.guard } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:probing_attack } desc = single_combat.0001.desc.my_feedback.probing_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:onslaught } desc = single_combat.0001.desc.my_feedback.onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:surprise_attack } desc = single_combat.0001.desc.my_feedback.surprise_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:taunt } desc = single_combat.0001.desc.my_feedback.taunt } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:put_the_boot_in } desc = single_combat.0001.desc.my_feedback.put_the_boot_in } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:strict_guard } desc = single_combat.0001.desc.my_feedback.strict_guard } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:confident_attack } desc = single_combat.0001.desc.my_feedback.confident_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:expert_onslaught } desc = single_combat.0001.desc.my_feedback.expert_onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:attempt_disarm } desc = single_combat.0001.desc.my_feedback.attempt_disarm } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:lightning_assault } desc = single_combat.0001.desc.my_feedback.lightning_assault } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:tire_opponent } desc = single_combat.0001.desc.my_feedback.tire_opponent } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:reason_you_suck_speech } desc = single_combat.0001.desc.my_feedback.reason_you_suck_speech } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:technique_from_legend } desc = single_combat.0001.desc.my_feedback.technique_from_legend } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:like_a_viper } desc = single_combat.0001.desc.my_feedback.like_a_viper } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:pocket_silver } desc = single_combat.0001.desc.my_feedback.pocket_silver } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:martial_voice } desc = single_combat.0001.desc.my_feedback.martial_voice } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:mocking_boast } desc = single_combat.0001.desc.my_feedback.mocking_boast } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:is_that_a_crocodile } desc = single_combat.0001.desc.my_feedback.is_that_a_crocodile } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:desert_warrior } desc = single_combat.0001.desc.my_feedback.desert_warrior } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:jungle_stalker } desc = single_combat.0001.desc.my_feedback.jungle_stalker } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:open_terrain_expert } desc = single_combat.0001.desc.my_feedback.open_terrain_expert } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0001.desc.my_feedback.rough_terrain_expert.rocky } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0001.desc.my_feedback.rough_terrain_expert.boggy } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:forest_fighter } desc = single_combat.0001.desc.my_feedback.forest_fighter } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:raaargh } desc = single_combat.0001.desc.my_feedback.raaargh } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hard_grit } desc = single_combat.0001.desc.my_feedback.hard_grit } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:feint_and_stab } desc = single_combat.0001.desc.my_feedback.feint_and_stab } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:butchery } desc = single_combat.0001.desc.my_feedback.butchery } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:stoic_veteran } desc = single_combat.0001.desc.my_feedback.stoic_veteran } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:blade_dance } desc = single_combat.0001.desc.my_feedback.blade_dance } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:wrath_of_highgod } desc = single_combat.0001.desc.my_feedback.wrath_of_highgod } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hurt_me_better } desc = single_combat.0001.desc.my_feedback.hurt_me_better } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:special_fallback } desc = single_combat.0001.desc.my_feedback.special_fallback } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:something_to_hide } desc = single_combat.0001.desc.my_feedback.something_to_hide } } } } # Scope:sc_attacker responses. ## What move did your opponent pick, and how does that play out from your POV? triggered_desc = { trigger = { exists = scope:sc_attacker_last_move } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0001.desc.opponent_response.wait_and_hope } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0001.desc.opponent_response.unsure_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught scope:sc_attacker = { house_not_allowed_to_yell_motto_trigger = yes } } desc = single_combat.0001.desc.opponent_response.enthusiastic_onslaught.banned_house } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught scope:sc_attacker.house = scope:sc_defender.house } desc = single_combat.0001.desc.opponent_response.enthusiastic_onslaught.own_house } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught #Otherwise, we can shout the motto. } desc = single_combat.0001.desc.opponent_response.enthusiastic_onslaught.motto } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0001.desc.opponent_response.hail_mary } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0001.desc.opponent_response.pocket_sand } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0001.desc.opponent_response.nut_em } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0001.desc.opponent_response.guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0001.desc.opponent_response.probing_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0001.desc.opponent_response.onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0001.desc.opponent_response.surprise_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0001.desc.opponent_response.taunt } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0001.desc.opponent_response.put_the_boot_in } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0001.desc.opponent_response.strict_guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0001.desc.opponent_response.confident_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0001.desc.opponent_response.expert_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0001.desc.opponent_response.attempt_disarm } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:lightning_assault } desc = single_combat.0001.desc.opponent_response.lightning_assault } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0001.desc.opponent_response.tire_opponent } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0001.desc.opponent_response.reason_you_suck_speech } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0001.desc.opponent_response.technique_from_legend } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0001.desc.opponent_response.like_a_viper } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0001.desc.opponent_response.pocket_silver } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0001.desc.opponent_response.martial_voice } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0001.desc.opponent_response.mocking_boast } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:is_that_a_crocodile } desc = single_combat.0001.desc.opponent_response.is_that_a_crocodile } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0001.desc.opponent_response.desert_warrior } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0001.desc.opponent_response.jungle_stalker } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0001.desc.opponent_response.open_terrain_expert } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0001.desc.opponent_response.rough_terrain_expert.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0001.desc.opponent_response.rough_terrain_expert.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0001.desc.opponent_response.forest_fighter } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0001.desc.opponent_response.raaargh } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0001.desc.opponent_response.hard_grit } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0001.desc.opponent_response.feint_and_stab } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0001.desc.opponent_response.butchery } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0001.desc.opponent_response.stoic_veteran } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0001.desc.opponent_response.blade_dance } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0001.desc.opponent_response.wrath_of_highgod } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0001.desc.opponent_response.hurt_me_better } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0001.desc.opponent_response.special_fallback } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:something_to_hide } desc = single_combat.0001.desc.opponent_response.something_to_hide } } } } # Duel status updates. triggered_desc = { trigger = { scope:sc_defender.var:current_round > 1 } desc = { first_valid = { # Injury updates. ## For scope:sc_defender. ### Injury chance very unlikely. triggered_desc = { trigger = { sc_defender_injury_check_actual <= single_combat_injury_very_unlikely_value } desc = single_combat.0001.desc.injury_check.personal.very_unlikely } ### Injury chance unlikely. triggered_desc = { trigger = { sc_defender_injury_check_actual <= single_combat_injury_unlikely_value } desc = single_combat.0001.desc.injury_check.personal.unlikely } ### Injury chance moderate. triggered_desc = { trigger = { sc_defender_injury_check_actual <= single_combat_injury_neutral_value } desc = single_combat.0001.desc.injury_check.personal.moderate } ### Injury chance likely. triggered_desc = { trigger = { sc_defender_injury_check_actual <= single_combat_injury_likely_value } desc = single_combat.0001.desc.injury_check.personal.likely } ### Injury chance very likely. desc = single_combat.0001.desc.injury_check.personal.very_likely } first_valid = { ## For scope:sc_attacker. ### Injury chance very unlikely. triggered_desc = { trigger = { sc_attacker_injury_check_actual <= single_combat_injury_very_unlikely_value } desc = single_combat.0001.desc.injury_check.opponent.very_unlikely } ### Injury chance unlikely. triggered_desc = { trigger = { sc_attacker_injury_check_actual <= single_combat_injury_unlikely_value } desc = single_combat.0001.desc.injury_check.opponent.unlikely } ### Injury chance moderate. triggered_desc = { trigger = { sc_attacker_injury_check_actual <= single_combat_injury_neutral_value } desc = single_combat.0001.desc.injury_check.opponent.moderate } ### Injury chance likely. triggered_desc = { trigger = { sc_attacker_injury_check_actual <= single_combat_injury_likely_value } desc = single_combat.0001.desc.injury_check.opponent.likely } ### Injury chance very likely. desc = single_combat.0001.desc.injury_check.opponent.very_likely } first_valid = { # Success updates. ## Victory almost impossible. triggered_desc = { trigger = { scope:sc_defender.var:sc_defender_success_check <= single_combat_success_almost_impossible_value } desc = single_combat.0001.desc.success_check.almost_impossible } ## Victory very unlikely. triggered_desc = { trigger = { scope:sc_defender.var:sc_defender_success_check <= single_combat_success_very_unlikely_value } desc = single_combat.0001.desc.success_check.very_unlikely } ## Victory unlikely. triggered_desc = { trigger = { scope:sc_defender.var:sc_defender_success_check <= single_combat_success_unlikely_value } desc = single_combat.0001.desc.success_check.unlikely } ## Victory in the balance. triggered_desc = { trigger = { scope:sc_defender.var:sc_defender_success_check <= single_combat_success_likely_value } desc = single_combat.0001.desc.success_check.moderate } ## Victory likely. triggered_desc = { trigger = { scope:sc_defender.var:sc_defender_success_check <= single_combat_success_very_likely_value } desc = single_combat.0001.desc.success_check.likely } ## Victory very likely. triggered_desc = { trigger = { scope:sc_defender.var:sc_defender_success_check <= single_combat_success_almost_certain_value } desc = single_combat.0001.desc.success_check.very_likely } ## Victory almost certain. desc = single_combat.0001.desc.success_check.almost_certain } } } } } #Otherwise, give us the offensive descs. Triggered_desc kept for indenting. triggered_desc = { trigger = { this = scope:sc_attacker } desc = { # First round. ## We just play an intro spiel. triggered_desc = { trigger = { scope:sc_defender.var:current_round = 1 } desc = single_combat.0001.desc.sc_attacker.intro } ## Slightly different capstone speeches, depending on how deadly the duel is expected to be. triggered_desc = { trigger = { scope:sc_defender.var:current_round = 1 duel_will_end_in_opponent_death_trigger = no } desc = single_combat.0001.desc.capstone.intro.first_blood } triggered_desc = { trigger = { scope:sc_defender.var:current_round = 1 duel_will_end_in_opponent_death_trigger = yes } desc = single_combat.0001.desc.capstone.intro.deadly } triggered_desc = { trigger = { scope:sc_defender.var:current_round = 1 } desc = single_combat.0001.desc.sc_attacker.intro.epilogue } # Scope:sc_attacker feedback. ## So you can see a bit of fairly-static feedback on how your selected combat move went. triggered_desc = { trigger = { exists = scope:sc_attacker_last_move } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope duel_will_end_in_my_death_trigger = yes NOT = { has_trait = brave } } desc = single_combat.0001.desc.my_feedback.wait_and_hope.will_die } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope OR = { duel_will_end_in_my_death_trigger = no has_trait = brave } } desc = single_combat.0001.desc.my_feedback.wait_and_hope.will_live } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0001.desc.my_feedback.unsure_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0001.desc.my_feedback.enthusiastic_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0001.desc.my_feedback.hail_mary } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0001.desc.my_feedback.pocket_sand } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0001.desc.my_feedback.nut_em } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0001.desc.my_feedback.guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0001.desc.my_feedback.probing_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0001.desc.my_feedback.onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0001.desc.my_feedback.surprise_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0001.desc.my_feedback.taunt } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0001.desc.my_feedback.put_the_boot_in } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0001.desc.my_feedback.strict_guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0001.desc.my_feedback.confident_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0001.desc.my_feedback.expert_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0001.desc.my_feedback.attempt_disarm } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:lightning_assault } desc = single_combat.0001.desc.my_feedback.lightning_assault } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0001.desc.my_feedback.tire_opponent } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0001.desc.my_feedback.reason_you_suck_speech } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0001.desc.my_feedback.technique_from_legend } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0001.desc.my_feedback.like_a_viper } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0001.desc.my_feedback.pocket_silver } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0001.desc.my_feedback.martial_voice } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0001.desc.my_feedback.mocking_boast } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:is_that_a_crocodile } desc = single_combat.0001.desc.my_feedback.is_that_a_crocodile } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0001.desc.my_feedback.desert_warrior } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0001.desc.my_feedback.jungle_stalker } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0001.desc.my_feedback.open_terrain_expert } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0001.desc.my_feedback.rough_terrain_expert.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0001.desc.my_feedback.rough_terrain_expert.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0001.desc.my_feedback.forest_fighter } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0001.desc.my_feedback.raaargh } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0001.desc.my_feedback.hard_grit } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0001.desc.my_feedback.feint_and_stab } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0001.desc.my_feedback.butchery } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0001.desc.my_feedback.stoic_veteran } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0001.desc.my_feedback.blade_dance } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0001.desc.my_feedback.wrath_of_highgod } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0001.desc.my_feedback.hurt_me_better } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0001.desc.my_feedback.special_fallback } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:something_to_hide } desc = single_combat.0001.desc.my_feedback.something_to_hide } } } } # Scope:sc_defender responses. ## What move did your opponent pick, and how does that play out from your POV? triggered_desc = { trigger = { exists = scope:sc_defender_last_move } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_defender_last_move = flag:wait_and_hope } desc = single_combat.0001.desc.opponent_response.wait_and_hope } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:unsure_attack } desc = single_combat.0001.desc.opponent_response.unsure_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:enthusiastic_onslaught scope:sc_defender = { house_not_allowed_to_yell_motto_trigger = yes } } desc = single_combat.0001.desc.opponent_response.enthusiastic_onslaught.banned_house } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:enthusiastic_onslaught scope:sc_defender.house = scope:sc_attacker.house } desc = single_combat.0001.desc.opponent_response.enthusiastic_onslaught.own_house } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:enthusiastic_onslaught #Otherwise, we can shout the motto. } desc = single_combat.0001.desc.opponent_response.enthusiastic_onslaught.motto } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hail_mary } desc = single_combat.0001.desc.opponent_response.hail_mary } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:pocket_sand } desc = single_combat.0001.desc.opponent_response.pocket_sand } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:nut_em } desc = single_combat.0001.desc.opponent_response.nut_em } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:guard } desc = single_combat.0001.desc.opponent_response.guard } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:probing_attack } desc = single_combat.0001.desc.opponent_response.probing_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:onslaught } desc = single_combat.0001.desc.opponent_response.onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:surprise_attack } desc = single_combat.0001.desc.opponent_response.surprise_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:taunt } desc = single_combat.0001.desc.opponent_response.taunt } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:put_the_boot_in } desc = single_combat.0001.desc.opponent_response.put_the_boot_in } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:strict_guard } desc = single_combat.0001.desc.opponent_response.strict_guard } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:confident_attack } desc = single_combat.0001.desc.opponent_response.confident_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:expert_onslaught } desc = single_combat.0001.desc.opponent_response.expert_onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:attempt_disarm } desc = single_combat.0001.desc.opponent_response.attempt_disarm } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:lightning_assault } desc = single_combat.0001.desc.opponent_response.lightning_assault } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:tire_opponent } desc = single_combat.0001.desc.opponent_response.tire_opponent } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:reason_you_suck_speech } desc = single_combat.0001.desc.opponent_response.reason_you_suck_speech } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:technique_from_legend } desc = single_combat.0001.desc.opponent_response.technique_from_legend } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:like_a_viper } desc = single_combat.0001.desc.opponent_response.like_a_viper } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:pocket_silver } desc = single_combat.0001.desc.opponent_response.pocket_silver } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:martial_voice } desc = single_combat.0001.desc.opponent_response.martial_voice } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:mocking_boast } desc = single_combat.0001.desc.opponent_response.mocking_boast } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:is_that_a_crocodile } desc = single_combat.0001.desc.opponent_response.is_that_a_crocodile } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:desert_warrior } desc = single_combat.0001.desc.opponent_response.desert_warrior } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:jungle_stalker } desc = single_combat.0001.desc.opponent_response.jungle_stalker } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:open_terrain_expert } desc = single_combat.0001.desc.opponent_response.open_terrain_expert } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0001.desc.opponent_response.rough_terrain_expert.rocky } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0001.desc.opponent_response.rough_terrain_expert.boggy } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:forest_fighter } desc = single_combat.0001.desc.opponent_response.forest_fighter } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:raaargh } desc = single_combat.0001.desc.opponent_response.raaargh } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hard_grit } desc = single_combat.0001.desc.opponent_response.hard_grit } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:feint_and_stab } desc = single_combat.0001.desc.opponent_response.feint_and_stab } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:butchery } desc = single_combat.0001.desc.opponent_response.butchery } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:stoic_veteran } desc = single_combat.0001.desc.opponent_response.stoic_veteran } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:blade_dance } desc = single_combat.0001.desc.opponent_response.blade_dance } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:wrath_of_highgod } desc = single_combat.0001.desc.opponent_response.wrath_of_highgod } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hurt_me_better } desc = single_combat.0001.desc.opponent_response.hurt_me_better } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:special_fallback } desc = single_combat.0001.desc.opponent_response.special_fallback } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:something_to_hide } desc = single_combat.0001.desc.opponent_response.something_to_hide } } } } # Duel status updates. triggered_desc = { trigger = { scope:sc_defender.var:current_round > 1 } desc = { first_valid = { # Injury updates. ## For scope:sc_attacker. ### Injury chance very unlikely. triggered_desc = { trigger = { sc_attacker_injury_check_actual <= single_combat_injury_very_unlikely_value } desc = single_combat.0001.desc.injury_check.personal.very_unlikely } ### Injury chance unlikely. triggered_desc = { trigger = { sc_attacker_injury_check_actual <= single_combat_injury_unlikely_value } desc = single_combat.0001.desc.injury_check.personal.unlikely } ### Injury chance moderate. triggered_desc = { trigger = { sc_attacker_injury_check_actual <= single_combat_injury_neutral_value } desc = single_combat.0001.desc.injury_check.personal.moderate } ### Injury chance likely. triggered_desc = { trigger = { sc_attacker_injury_check_actual <= single_combat_injury_likely_value } desc = single_combat.0001.desc.injury_check.personal.likely } ### Injury chance very likely. desc = single_combat.0001.desc.injury_check.personal.very_likely } first_valid = { ## For scope:sc_defender. ### Injury chance very unlikely. triggered_desc = { trigger = { sc_defender_injury_check_actual <= single_combat_injury_very_unlikely_value } desc = single_combat.0001.desc.injury_check.opponent.very_unlikely } ### Injury chance unlikely. triggered_desc = { trigger = { sc_defender_injury_check_actual <= single_combat_injury_unlikely_value } desc = single_combat.0001.desc.injury_check.opponent.unlikely } ### Injury chance moderate. triggered_desc = { trigger = { sc_defender_injury_check_actual <= single_combat_injury_neutral_value } desc = single_combat.0001.desc.injury_check.opponent.moderate } ### Injury chance likely. triggered_desc = { trigger = { sc_defender_injury_check_actual <= single_combat_injury_likely_value } desc = single_combat.0001.desc.injury_check.opponent.likely } ### Injury chance very likely. desc = single_combat.0001.desc.injury_check.opponent.very_likely } first_valid = { # Success updates. ## Victory almost impossible. triggered_desc = { trigger = { scope:sc_attacker.var:sc_attacker_success_check <= single_combat_success_almost_impossible_value } desc = single_combat.0001.desc.success_check.almost_impossible } ## Victory very unlikely. triggered_desc = { trigger = { scope:sc_attacker.var:sc_attacker_success_check <= single_combat_success_very_unlikely_value } desc = single_combat.0001.desc.success_check.very_unlikely } ## Victory unlikely. triggered_desc = { trigger = { scope:sc_attacker.var:sc_attacker_success_check <= single_combat_success_unlikely_value } desc = single_combat.0001.desc.success_check.unlikely } ## Victory in the balance. triggered_desc = { trigger = { scope:sc_attacker.var:sc_attacker_success_check <= single_combat_success_likely_value } desc = single_combat.0001.desc.success_check.moderate } ## Victory likely. triggered_desc = { trigger = { scope:sc_attacker.var:sc_attacker_success_check <= single_combat_success_very_likely_value } desc = single_combat.0001.desc.success_check.likely } ## Victory very likely. triggered_desc = { trigger = { scope:sc_attacker.var:sc_attacker_success_check <= single_combat_success_almost_certain_value } desc = single_combat.0001.desc.success_check.very_likely } ## Victory almost certain. desc = single_combat.0001.desc.success_check.almost_certain } } } } } } } theme = martial left_portrait = { character = scope:myself triggered_animation = { trigger = { portrait_should_wield_sword_trigger = yes culture = { has_cultural_pillar = heritage_japonic } } animation = chudan_no_kamae } triggered_animation = { trigger = { always = yes } scripted_animation = duel_wield_weapon } } right_portrait = { character = scope:my_foe scripted_animation = duel_wield_weapon } artifact = { target = scope:myself.var:signature_weapon_scope position = lower_left_portrait trigger = { exists = scope:myself.var:signature_weapon_scope } } artifact = { target = scope:my_foe.var:signature_weapon_scope position = lower_right_portrait trigger = { exists = scope:my_foe.var:signature_weapon_scope } } # Background Logic override_background = { trigger = { scope:locale = flag:terrain_scope } reference = terrain_scope } override_background = { trigger = { scope:locale = flag:battlefield } reference = battlefield } override_background = { trigger = { scope:locale = flag:alley_night } reference = alley_night } override_background = { trigger = { scope:locale = flag:alley_day } reference = alley_day } override_background = { trigger = { scope:locale = flag:temple } reference = temple } override_background = { trigger = { scope:locale = flag:corridor_night } reference = corridor_night } override_background = { trigger = { scope:locale = flag:corridor_day } reference = corridor_day } override_background = { trigger = { scope:locale = flag:courtyard } reference = courtyard } override_background = { trigger = { scope:locale = flag:dungeon } reference = dungeon } override_background = { trigger = { scope:locale = flag:docks } reference = docks } override_background = { trigger = { scope:locale = flag:feast } reference = feast } override_background = { trigger = { scope:locale = flag:market } reference = market } override_background = { trigger = { scope:locale = flag:tavern } reference = tavern } override_background = { trigger = { scope:locale = flag:throne_room } reference = throne_room } override_background = { trigger = { scope:locale = flag:army_camp } reference = army_camp } override_background = { trigger = { scope:locale = flag:ep2_travel_bridge } reference = ep2_travel_bridge } immediate = { play_music_cue = "mx_cue_combat_stinger" # Generate combat options. select_combat_options_from_pool_effect = yes # Set up portraits for this event, putting the current actor always on the left. if = { limit = { this = scope:sc_defender } scope:sc_defender = { save_scope_as = myself } scope:sc_attacker = { save_scope_as = my_foe } } else = { scope:sc_attacker = { save_scope_as = myself } scope:sc_defender = { save_scope_as = my_foe } } # Show opponent's move effect. if = { # Check that there's a last move kicking about to look at. limit = { OR = { exists = scope:sc_attacker_last_move exists = scope:sc_defender_last_move } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:wait_and_hope } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:wait_and_hope } } } scope:my_foe = { show_as_tooltip = { combat_move_wait_and_hope_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:unsure_attack } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:unsure_attack } } } scope:my_foe = { show_as_tooltip = { combat_move_unsure_attack_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:enthusiastic_onslaught } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:enthusiastic_onslaught } } } scope:my_foe = { show_as_tooltip = { combat_move_enthusiastic_onslaught_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:hail_mary } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:hail_mary } } } scope:my_foe = { show_as_tooltip = { combat_move_hail_mary_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:pocket_sand } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:pocket_sand } } } scope:my_foe = { show_as_tooltip = { combat_move_pocket_sand_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:nut_em } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:nut_em } } } scope:my_foe = { show_as_tooltip = { combat_move_nut_em_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:guard } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:guard } } } scope:my_foe = { show_as_tooltip = { combat_move_guard_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:probing_attack } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:probing_attack } } } scope:my_foe = { show_as_tooltip = { combat_move_probing_attack_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:onslaught } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:onslaught } } } scope:my_foe = { show_as_tooltip = { combat_move_onslaught_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:surprise_attack } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:surprise_attack } } } scope:my_foe = { show_as_tooltip = { combat_move_surprise_attack_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:taunt } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:taunt } } } scope:my_foe = { show_as_tooltip = { combat_move_taunt_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:put_the_boot_in } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:put_the_boot_in } } } scope:my_foe = { show_as_tooltip = { combat_move_put_the_boot_in_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:strict_guard } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:strict_guard } } } scope:my_foe = { show_as_tooltip = { combat_move_strict_guard_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:confident_attack } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:confident_attack } } } scope:my_foe = { show_as_tooltip = { combat_move_confident_attack_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:expert_onslaught } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:expert_onslaught } } } scope:my_foe = { show_as_tooltip = { combat_move_expert_onslaught_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:attempt_disarm } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:attempt_disarm } } } scope:my_foe = { show_as_tooltip = { combat_move_attempt_disarm_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:lightning_assault } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:lightning_assault } } } scope:my_foe = { show_as_tooltip = { combat_move_lightning_assault_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:tire_opponent } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:tire_opponent } } } scope:my_foe = { show_as_tooltip = { combat_move_tire_opponent_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:reason_you_suck_speech } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:reason_you_suck_speech } } } scope:my_foe = { show_as_tooltip = { combat_move_reason_you_suck_speech_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:technique_from_legend } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:technique_from_legend } } } scope:my_foe = { show_as_tooltip = { combat_move_technique_from_legend_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:like_a_viper } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:like_a_viper } } } scope:my_foe = { show_as_tooltip = { combat_move_like_a_viper_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:pocket_silver } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:pocket_silver } } } scope:my_foe = { show_as_tooltip = { combat_move_pocket_silver_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:martial_voice } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:martial_voice } } } scope:my_foe = { show_as_tooltip = { combat_move_martial_voice_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:mocking_boast } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:mocking_boast } } } scope:my_foe = { show_as_tooltip = { combat_move_mocking_boast_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:is_that_a_crocodile } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:is_that_a_crocodile } } } scope:my_foe = { show_as_tooltip = { combat_move_is_that_a_crocodile_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:desert_warrior } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:desert_warrior } } } scope:my_foe = { show_as_tooltip = { combat_move_desert_warrior_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:jungle_stalker } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:jungle_stalker } } } scope:my_foe = { show_as_tooltip = { combat_move_jungle_stalker_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:open_terrain_expert } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:open_terrain_expert } } } scope:my_foe = { show_as_tooltip = { combat_move_open_terrain_expert_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:rough_terrain_expert } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:rough_terrain_expert } } } scope:my_foe = { show_as_tooltip = { combat_move_rough_terrain_expert_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:forest_fighter } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:forest_fighter } } } scope:my_foe = { show_as_tooltip = { combat_move_forest_fighter_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:raaargh } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:raaargh } } } scope:my_foe = { show_as_tooltip = { combat_move_raaargh_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:hard_grit } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:hard_grit } } } scope:my_foe = { show_as_tooltip = { combat_move_hard_grit_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:feint_and_stab } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:feint_and_stab } } } scope:my_foe = { show_as_tooltip = { combat_move_feint_and_stab_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:butchery } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:butchery } } } scope:my_foe = { show_as_tooltip = { combat_move_butchery_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:stoic_veteran } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:stoic_veteran } } } scope:my_foe = { show_as_tooltip = { combat_move_stoic_veteran_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:blade_dance } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:blade_dance } } } scope:my_foe = { show_as_tooltip = { combat_move_blade_dance_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:wrath_of_highgod } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:wrath_of_highgod } } } scope:my_foe = { show_as_tooltip = { combat_move_wrath_of_highgod_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:hurt_me_better } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:hurt_me_better } } } scope:my_foe = { show_as_tooltip = { combat_move_hurt_me_better_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:special_fallback } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:special_fallback } } } scope:my_foe = { show_as_tooltip = { combat_move_special_fallback_effect = yes } } } if = { limit = { OR = { AND = { this = scope:sc_defender scope:sc_attacker_last_move = flag:something_to_hide } AND = { this = scope:sc_attacker scope:sc_defender_last_move = flag:something_to_hide } } } scope:my_foe = { show_as_tooltip = { combat_move_something_to_hide_effect = yes } } } } } # Stress_impact in the options is deliberately left out of the ai_chance weightings. It's not a huge amount for anyone (typically miniscule for standard moves, minor for special ones), since many of these options can repeat within one combat, and it's no bad thing to have characters come out of duels increasingly stressed. #Wait and Hope option = { name = single_combat.0001.wait_and_hope trigger = { exists = local_var:combat_move_wait_and_hope_flag } #Move clarification custom_tooltip = single_combat.0001.tt.wait_and_hope #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_wait_and_hope_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_wait_and_hope_effect = yes } } stress_impact = { patient = miniscule_stress_impact_loss calm = miniscule_stress_impact_loss impatient = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_timid_personality_scripted_modifier = yes } } #Unsure Attack option = { name = { trigger = { scope:fatality = flag:yes } text = single_combat.0001.unsure_attack } name = { trigger = { scope:fatality = flag:no } text = single_combat.0001.unsure_attack_non_fatal } trigger = { exists = local_var:combat_move_unsure_attack_flag } #Move clarification custom_tooltip = single_combat.0001.tt.unsure_attack #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_unsure_attack_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_unsure_attack_effect = yes } } # No stress for middle-ground standard options. ai_chance = { base = 100 sce_rational_personality_scripted_modifier = yes } } #Enthusiastic Onslaught option = { # Since we yell the house motto here, we need slight separation between variants. ## Firstly, if your house is on the banned list, you use a fallback. name = { trigger = { house_not_allowed_to_yell_motto_trigger = yes } text = single_combat.0001.enthusiastic_onslaught.banned_house } ## Secondly, if you're fighting another member of your own house, you use a different fallback. name = { trigger = { house_not_allowed_to_yell_motto_trigger = no scope:sc_attacker.house = scope:sc_defender.house } text = single_combat.0001.enthusiastic_onslaught.own_house } ## Thirdly, if you're a shouty house who isn't fighting another person from your shouty house, then you use your motto. name = { trigger = { house_not_allowed_to_yell_motto_trigger = no scope:sc_attacker.house != scope:sc_defender.house } text = single_combat.0001.enthusiastic_onslaught.motto } trigger = { exists = local_var:combat_move_enthusiastic_onslaught_flag } #Move clarification custom_tooltip = single_combat.0001.tt.enthusiastic_onslaught #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_enthusiastic_onslaught_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_enthusiastic_onslaught_effect = yes } } stress_impact = { impatient = miniscule_stress_impact_loss wrathful = miniscule_stress_impact_loss patient = miniscule_stress_impact_gain calm = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_aggressive_personality_scripted_modifier = yes } } #Hail Mary option = { name = single_combat.0001.hail_mary trigger = { exists = local_var:combat_move_hail_mary_flag } #Move clarification custom_tooltip = single_combat.0001.tt.hail_mary #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_hail_mary_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_hail_mary_effect = yes } } stress_impact = { impatient = miniscule_stress_impact_loss brave = minor_stress_impact_loss patient = miniscule_stress_impact_gain craven = minor_stress_impact_gain } ai_chance = { base = 100 sce_preferred_aggressive_personality_scripted_modifier = yes } } #Pocket Sand option = { name = single_combat.0001.pocket_sand trigger = { exists = local_var:combat_move_pocket_sand_flag } #Move clarification custom_tooltip = single_combat.0001.tt.pocket_sand #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_pocket_sand_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_pocket_sand_effect = yes } } stress_impact = { deceitful = miniscule_stress_impact_loss arbitrary = miniscule_stress_impact_loss honest = miniscule_stress_impact_gain just = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_preferred_timid_personality_scripted_modifier = yes } } #Nut 'em option = { name = single_combat.0001.nut_em trigger = { exists = local_var:combat_move_nut_em_flag } #Move clarification custom_tooltip = single_combat.0001.tt.nut_em #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_nut_em_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_nut_em_effect = yes } } stress_impact = { deceitful = miniscule_stress_impact_loss arbitrary = miniscule_stress_impact_loss honest = miniscule_stress_impact_gain just = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_preferred_aggressive_personality_scripted_modifier = yes } } #Guard option = { name = single_combat.0001.guard trigger = { exists = local_var:combat_move_guard_flag } #Move clarification custom_tooltip = single_combat.0001.tt.guard #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_guard_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_guard_effect = yes } } stress_impact = { patient = miniscule_stress_impact_loss calm = miniscule_stress_impact_loss impatient = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_timid_personality_scripted_modifier = yes } } #Probing Attack option = { name = single_combat.0001.probing_attack trigger = { exists = local_var:combat_move_probing_attack_flag } #Move clarification custom_tooltip = single_combat.0001.tt.probing_attack #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_probing_attack_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_probing_attack_effect = yes } } # No stress for middle-ground standard options. ai_chance = { base = 100 sce_rational_personality_scripted_modifier = yes } } #Onslaught option = { name = single_combat.0001.onslaught trigger = { exists = local_var:combat_move_onslaught_flag } #Move clarification custom_tooltip = single_combat.0001.tt.onslaught #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_onslaught_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_onslaught_effect = yes } } stress_impact = { impatient = miniscule_stress_impact_loss wrathful = miniscule_stress_impact_loss patient = miniscule_stress_impact_gain calm = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_aggressive_personality_scripted_modifier = yes } } #Surprise Attack option = { name = single_combat.0001.surprise_attack trigger = { exists = local_var:combat_move_surprise_attack_flag } #Move clarification custom_tooltip = single_combat.0001.tt.surprise_attack #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_surprise_attack_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_surprise_attack_effect = yes } } # No need for stress weighting here; fairly standard tactic that anyone would try. ai_chance = { base = 100 sce_preferred_rational_personality_scripted_modifier = yes } } #Taunt option = { name = single_combat.0001.taunt trigger = { exists = local_var:combat_move_taunt_flag } #Move clarification custom_tooltip = single_combat.0001.tt.taunt #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_taunt_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_taunt_effect = yes } } stress_impact = { callous = miniscule_stress_impact_loss sadistic = miniscule_stress_impact_loss compassionate = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_preferred_timid_personality_scripted_modifier = yes } } #Put the Boot In option = { name = single_combat.0001.put_the_boot_in trigger = { exists = local_var:combat_move_put_the_boot_in_flag } #Move clarification custom_tooltip = single_combat.0001.tt.put_the_boot_in #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_put_the_boot_in_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_put_the_boot_in_effect = yes } } stress_impact = { impatient = miniscule_stress_impact_loss brave = minor_stress_impact_loss patient = miniscule_stress_impact_gain craven = minor_stress_impact_gain } ai_chance = { base = 100 sce_preferred_aggressive_personality_scripted_modifier = yes } } #Strict Guard option = { name = single_combat.0001.strict_guard trigger = { exists = local_var:combat_move_strict_guard_flag } #Move clarification custom_tooltip = single_combat.0001.tt.strict_guard #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_strict_guard_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_strict_guard_effect = yes } } stress_impact = { patient = miniscule_stress_impact_loss calm = miniscule_stress_impact_loss impatient = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_timid_personality_scripted_modifier = yes } } #Confident Attack option = { name = single_combat.0001.confident_attack trigger = { exists = local_var:combat_move_confident_attack_flag } #Move clarification custom_tooltip = single_combat.0001.tt.confident_attack #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_confident_attack_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_confident_attack_effect = yes } } # No stress for middle-ground standard options. ai_chance = { base = 100 sce_rational_personality_scripted_modifier = yes } } #Expert Onslaught option = { name = single_combat.0001.expert_onslaught trigger = { exists = local_var:combat_move_expert_onslaught_flag } #Move clarification custom_tooltip = single_combat.0001.tt.expert_onslaught #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_expert_onslaught_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_expert_onslaught_effect = yes } } stress_impact = { impatient = miniscule_stress_impact_loss wrathful = miniscule_stress_impact_loss patient = miniscule_stress_impact_gain calm = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_aggressive_personality_scripted_modifier = yes } } #Attempt Disarm option = { name = single_combat.0001.attempt_disarm trigger = { exists = local_var:combat_move_attempt_disarm_flag } #Move clarification custom_tooltip = single_combat.0001.tt.attempt_disarm #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_attempt_disarm_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_attempt_disarm_effect = yes } } stress_impact = { patient = miniscule_stress_impact_loss calm = miniscule_stress_impact_loss impatient = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_preferred_timid_personality_scripted_modifier = yes } } #Lightning Assault option = { name = single_combat.0001.lightning_assault trigger = { exists = local_var:combat_move_lightning_assault_flag } #Move clarification custom_tooltip = single_combat.0001.tt.lightning_assault #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_lightning_assault_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_lightning_assault_effect = yes } } stress_impact = { impatient = miniscule_stress_impact_loss diligent = miniscule_stress_impact_loss patient = miniscule_stress_impact_gain lazy = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_preferred_aggressive_personality_scripted_modifier = yes } } #Tire Opponent option = { name = single_combat.0001.tire_opponent trigger = { exists = local_var:combat_move_tire_opponent_flag } #Move clarification custom_tooltip = single_combat.0001.tt.tire_opponent #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_tire_opponent_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_tire_opponent_effect = yes } } stress_impact = { diligent = miniscule_stress_impact_loss calm = miniscule_stress_impact_loss lazy = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_preferred_rational_personality_scripted_modifier = yes } } #Reason You Suck Speech option = { name = single_combat.0001.reason_you_suck_speech trigger = { exists = local_var:combat_move_reason_you_suck_speech_flag } #Move clarification custom_tooltip = single_combat.0001.tt.reason_you_suck_speech #Spawn Info skill = diplomacy #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_reason_you_suck_speech_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_reason_you_suck_speech_effect = yes } } stress_impact = { callous = miniscule_stress_impact_loss sadistic = miniscule_stress_impact_loss gregarious = miniscule_stress_impact_loss compassionate = miniscule_stress_impact_gain shy = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_enjoys_arrogant_speeches_scripted_modifier = yes } } #Technique from Legend option = { name = single_combat.0001.technique_from_legend trigger = { exists = local_var:combat_move_technique_from_legend_flag } #Move clarification custom_tooltip = single_combat.0001.tt.technique_from_legend #Spawn Info skill = learning #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_technique_from_legend_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_technique_from_legend_effect = yes } } stress_impact = { brave = minor_stress_impact_loss trusting = minor_stress_impact_loss # A trusting character *totally* believes the legends are both true and accurate! craven = minor_stress_impact_gain paranoid = minor_stress_impact_gain # Whereas a paranoid character is 99% sure they're bullshit, but is hoping against hope anyway. } ai_chance = { base = 100 sce_shrewd_fighter_scripted_modifier = yes # Weight up relevant traits: scholar modifier = { add = sce_ai_mod_trait_weight_medium has_trait = scholar } # Weight up relevant traits: theologian modifier = { add = sce_ai_mod_trait_weight_light has_trait = theologian } } } #Like a Viper option = { name = single_combat.0001.like_a_viper trigger = { exists = local_var:combat_move_like_a_viper_flag } #Move clarification custom_tooltip = single_combat.0001.tt.like_a_viper #Spawn Info skill = intrigue #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_like_a_viper_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_like_a_viper_effect = yes } } stress_impact = { deceitful = minor_stress_impact_loss arbitrary = minor_stress_impact_loss honest = minor_stress_impact_gain just = minor_stress_impact_gain } ai_chance = { base = 100 sce_shrewd_fighter_scripted_modifier = yes # Weight up relevant traits: schemer modifier = { add = sce_ai_mod_trait_weight_heavy has_trait = schemer } # Weight up relevant traits: torturer modifier = { add = sce_ai_mod_trait_weight_medium has_trait = torturer } } } #Pocket Silver option = { name = single_combat.0001.pocket_silver trigger = { exists = local_var:combat_move_pocket_silver_flag } #Move clarification custom_tooltip = single_combat.0001.tt.pocket_silver #Spawn Info skill = stewardship #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_pocket_silver_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_pocket_silver_effect = yes } } stress_impact = { deceitful = miniscule_stress_impact_loss arbitrary = miniscule_stress_impact_loss generous = miniscule_stress_impact_loss honest = miniscule_stress_impact_gain just = miniscule_stress_impact_gain greedy = miniscule_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_greed = -0.5 } # Weight up relevant traits: avaricious modifier = { add = sce_ai_mod_trait_down_weight_medium has_trait = avaricious } } } #Martial Voice option = { name = single_combat.0001.martial_voice trigger = { exists = local_var:combat_move_martial_voice_flag } #Move clarification custom_tooltip = single_combat.0001.tt.martial_voice #Spawn Info skill = martial #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_martial_voice_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_martial_voice_effect = yes } } stress_impact = { callous = miniscule_stress_impact_loss sadistic = miniscule_stress_impact_loss gregarious = miniscule_stress_impact_loss compassionate = miniscule_stress_impact_gain shy = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_enjoys_arrogant_speeches_scripted_modifier = yes # Weight up relevant traits: strategist modifier = { add = sce_ai_mod_trait_weight_medium has_trait = strategist } } } #Mocking Boast option = { name = single_combat.0001.mocking_boast trigger = { exists = local_var:combat_move_mocking_boast_flag } #Move clarification custom_tooltip = single_combat.0001.tt.mocking_boast #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_mocking_boast_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_mocking_boast_effect = yes } } stress_impact = { callous = miniscule_stress_impact_loss sadistic = miniscule_stress_impact_loss arrogant = miniscule_stress_impact_loss compassionate = miniscule_stress_impact_gain humble = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_enjoys_arrogant_speeches_scripted_modifier = yes } } #Is that a Crocodile?! option = { name = single_combat.0001.is_that_a_crocodile trigger = { exists = local_var:combat_move_is_that_a_crocodile_flag } #Move clarification custom_tooltip = single_combat.0001.tt.is_that_a_crocodile #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_is_that_a_crocodile_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_is_that_a_crocodile_effect = yes } } # Though it might be stressful for your opponent, a crocodile is not stressful for you. ai_chance = { base = 300 # If you get the good option, use the good option. } } #Desert Warrior option = { name = single_combat.0001.desert_warrior trigger = { exists = local_var:combat_move_desert_warrior_flag } #Move clarification custom_tooltip = single_combat.0001.tt.desert_warrior #Spawn Info trait = desert_warrior #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_desert_warrior_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_desert_warrior_effect = yes } } stress_impact = { diligent = miniscule_stress_impact_loss calm = miniscule_stress_impact_loss lazy = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_shrewd_fighter_scripted_modifier = yes } } #Jungle Stalker option = { name = single_combat.0001.jungle_stalker trigger = { exists = local_var:combat_move_jungle_stalker_flag } #Move clarification custom_tooltip = single_combat.0001.tt.jungle_stalker #Spawn Info trait = jungle_stalker #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_jungle_stalker_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_jungle_stalker_effect = yes } } stress_impact = { diligent = miniscule_stress_impact_loss calm = miniscule_stress_impact_loss lazy = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_shrewd_fighter_scripted_modifier = yes } } #Open Terrain Expert option = { name = single_combat.0001.open_terrain_expert trigger = { exists = local_var:combat_move_open_terrain_expert_flag } #Move clarification custom_tooltip = single_combat.0001.tt.open_terrain_expert #Spawn Info trait = open_terrain_expert #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_open_terrain_expert_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_open_terrain_expert_effect = yes } } stress_impact = { diligent = miniscule_stress_impact_loss calm = miniscule_stress_impact_loss lazy = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_shrewd_fighter_scripted_modifier = yes } } #Rough Terrain Expert option = { name = single_combat.0001.rough_terrain_expert trigger = { exists = local_var:combat_move_rough_terrain_expert_flag } #Move clarification custom_tooltip = single_combat.0001.tt.rough_terrain_expert #Spawn Info trait = rough_terrain_expert #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_rough_terrain_expert_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_rough_terrain_expert_effect = yes } } stress_impact = { diligent = miniscule_stress_impact_loss calm = miniscule_stress_impact_loss lazy = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_shrewd_fighter_scripted_modifier = yes } } #Forest Fighter option = { name = single_combat.0001.forest_fighter trigger = { exists = local_var:combat_move_forest_fighter_flag } #Move clarification custom_tooltip = single_combat.0001.tt.forest_fighter #Spawn Info trait = forest_fighter #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_forest_fighter_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_forest_fighter_effect = yes } } stress_impact = { diligent = miniscule_stress_impact_loss calm = miniscule_stress_impact_loss lazy = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_shrewd_fighter_scripted_modifier = yes } } #RAAARGH! option = { name = single_combat.0001.raaargh trigger = { exists = local_var:combat_move_raaargh_flag } #Move clarification custom_tooltip = single_combat.0001.tt.raaargh #Spawn Info trait = berserker #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_raaargh_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_raaargh_effect = yes } } # No stress for RAAARGH!, as it gives stress loss. ai_chance = { base = 100 sce_preferred_shrewd_fighter_scripted_modifier = yes } } #Hard Grit option = { name = single_combat.0001.hard_grit trigger = { exists = local_var:combat_move_hard_grit_flag } #Move clarification custom_tooltip = single_combat.0001.tt.hard_grit #Spawn Info trait = shieldmaiden #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_hard_grit_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_hard_grit_effect = yes } } # Loc here implies stoic professionalism, so doesn't seem fair to apply stress over that. ai_chance = { base = 100 sce_preferred_shrewd_fighter_scripted_modifier = yes } } #Feint & Stab option = { name = single_combat.0001.feint_and_stab trigger = { exists = local_var:combat_move_feint_and_stab_flag } #Move clarification custom_tooltip = single_combat.0001.tt.feint_and_stab #Spawn Info; use individual traits so that the unlock trait shows in the option UI. trait = lifestyle_hunter #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_feint_and_stab_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_feint_and_stab_effect = yes } } stress_impact = { deceitful = minor_stress_impact_loss arbitrary = minor_stress_impact_loss honest = minor_stress_impact_gain just = minor_stress_impact_gain } ai_chance = { base = 100 sce_preferred_shrewd_fighter_scripted_modifier = yes } } #Butchery option = { name = single_combat.0001.butchery trigger = { exists = local_var:combat_move_butchery_flag } #Move clarification custom_tooltip = single_combat.0001.tt.butchery #Spawn Info trait = viking #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_butchery_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_butchery_effect = yes } } stress_impact = { callous = minor_stress_impact_loss sadistic = minor_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 100 sce_preferred_shrewd_fighter_scripted_modifier = yes } } #Stoic Veteran option = { name = { trigger = { NOT = { scope:my_foe = { has_trait = varangian } } } text = single_combat.0001.stoic_veteran.general } name = { trigger = { scope:my_foe = { has_trait = varangian } } text = single_combat.0001.stoic_veteran.other_varangian } trigger = { exists = local_var:combat_move_stoic_veteran_flag } #Move clarification custom_tooltip = single_combat.0001.tt.stoic_veteran #Spawn Info trait = varangian #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_stoic_veteran_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_stoic_veteran_effect = yes } } # Loc here implies stoic professionalism, so doesn't seem fair to apply stress over that. ai_chance = { base = 100 sce_preferred_shrewd_fighter_scripted_modifier = yes } } #Blade Dance option = { name = { text = single_combat.0001.blade_dance trigger = { is_landed = yes } } name = { text = single_combat.0001.blade_dance_unlanded trigger = { is_landed = no } } trigger = { exists = local_var:combat_move_blade_dance_flag } #Move clarification custom_tooltip = single_combat.0001.tt.blade_dance #Spawn Info; use individual traits so that the unlock trait shows in the option UI. trait = lifestyle_blademaster #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_blade_dance_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_blade_dance_effect = yes } } # No appropriate stress loss for blade dance; arguably arrogant, as we portray them as haughty in the loc, but it's a bit mean to both hit the player verbally and mechanically for something that's up for interpretation. ai_chance = { base = 100 sce_preferred_shrewd_fighter_scripted_modifier = yes } } #Wrath of [HighGod] option = { name = single_combat.0001.wrath_of_highgod trigger = { exists = local_var:combat_move_wrath_of_highgod_flag } #Move clarification custom_tooltip = single_combat.0001.tt.wrath_of_highgod #Spawn Info trait = zealous #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_wrath_of_highgod_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_wrath_of_highgod_effect = yes } } stress_impact = { # Takes a bold human to stop fighting entirely and pray, however loudly, in the middle of a duel. craven = miniscule_stress_impact_loss brave = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_enjoys_arrogant_speeches_scripted_modifier = yes } } #Hurt Me Better option = { name = single_combat.0001.hurt_me_better trigger = { exists = local_var:combat_move_hurt_me_better_flag } #Move clarification custom_tooltip = single_combat.0001.tt.hurt_me_better #Spawn Info trait = deviant #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_hurt_me_better_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_hurt_me_better_effect = yes } } # We draw the line at stress loss/gain for lustful/chaste: we're already being a bit mean to deviant characters here, no need to ramp up the Hellraiser vibes *that* much. ai_chance = { base = 100 sce_shrewd_fighter_scripted_modifier = yes } } #Special Fallback: kick 'em in the shin option = { name = single_combat.0001.special_fallback trigger = { exists = local_var:combat_move_special_fallback_flag } #Move clarification custom_tooltip = single_combat.0001.tt.special_fallback #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_special_fallback_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_special_fallback_effect = yes } } # Shins, and the kicking thereof, have no particularly stressful effects on the human psyche. ai_chance = { base = 100 # Errr... I can't even begin to imagine how you'd set AI preferences for this. } } #Something to Hide option = { name = single_combat.0001.something_to_hide trigger = { exists = local_var:combat_move_something_to_hide_flag } #Move clarification custom_tooltip = single_combat.0001.tt.something_to_hide #Move effects ## First, we show the move's effects with no guff. show_as_tooltip = { combat_move_something_to_hide_effect = yes } ## Then, we check to make sure if scope:my_foe is still around to suffer the effects. This prevents errors if they die mid-combat. if = { limit = { scope:my_foe = { is_alive = yes } } hidden_effect = { combat_move_something_to_hide_effect = yes } } stress_impact = { deceitful = miniscule_stress_impact_loss arbitrary = miniscule_stress_impact_loss honest = miniscule_stress_impact_gain just = miniscule_stress_impact_gain } ai_chance = { base = 100 sce_enjoys_arrogant_speeches_scripted_modifier = yes # Weight up relevant traits: schemer modifier = { add = sce_ai_mod_trait_weight_light has_trait = schemer } } } #Work out the post-event effects. after = { # First, see if the next round is still valid. if = { limit = { OR = { scope:sc_attacker = { is_alive = no } scope:sc_defender = { is_alive = no } } } # First, clean up assorted things around the duels. hidden_effect = { remove_single_combat_info_effect = yes } # Then manually clear the duelling flag. scope:sc_defender = { if = { # Restrict to live characters to prevent errors. limit = { is_alive = yes } remove_variable = engaged_in_single_combat } } scope:sc_attacker = { if = { # Restrict to live characters to prevent errors. limit = { is_alive = yes } remove_variable = engaged_in_single_combat } } # Finally, fire the invalidation cleanup event. scope:sc_attacker = { #trigger_event = { saved_event_id = scope:invalidation_event } trigger_event = single_combat.1006 } } # Otherwise, we can go through the usual flow. else = { #If either character has had an edge modifier added, update character skills to account for duel edge stuff. scope:sc_attacker = { if = { limit = { has_character_flag = sce_needs_forced_recalc_flag } force_character_skill_recalculation = yes remove_character_flag = sce_needs_forced_recalc_flag } } scope:sc_defender = { if = { limit = { has_character_flag = sce_needs_forced_recalc_flag } force_character_skill_recalculation = yes remove_character_flag = sce_needs_forced_recalc_flag } } #Calculate injury risks for descs. calculate_injury_risks_effect = yes #And success chances. calculate_success_chances_effect = yes #If we're scope:sc_defender, send scope:sc_attacker their instance of the event. if = { limit = { this = scope:sc_defender } scope:sc_attacker = { trigger_event = single_combat.0001 } } #Otherwise we're scope:sc_attacker, so end the round. else = { trigger_event = single_combat.0021 } } } } ################################################## # Round End Events # by Ewan Cowhig Croft # 0021 - 0030 ################################################## # Standard round end event. single_combat.0021 = { hidden = yes immediate = { # Check what round we're at, and reduce the threshold variables as appropriate if we're in a late enough round. ## Reduce injury thresholds for both characters. if = { limit = { scope:sc_defender.var:current_round = round_injury_bonus_lower } debug_log = "single combat variable error-check: round_injury_bonus_lower" debug_log_scopes = yes change_variable = { name = sc_attacker_injury_bonus add = round_injury_adjustment_lower } scope:sc_defender = { change_variable = { name = sc_defender_injury_bonus add = round_injury_adjustment_lower } } } if = { limit = { scope:sc_defender.var:current_round = round_injury_bonus_lowest } debug_log = "single combat variable error-check: round_injury_bonus_lowest" debug_log_scopes = yes change_variable = { name = sc_attacker_injury_bonus add = round_injury_adjustment_lowest } scope:sc_defender = { change_variable = { name = sc_defender_injury_bonus add = round_injury_adjustment_lowest } } } ## Reduce success threshold. if = { limit = { scope:sc_defender.var:current_round = round_success_threshold_lower } debug_log = "single combat variable error-check: round_success_threshold_lower" debug_log_scopes = yes scope:sc_defender = { change_variable = { name = success_threshold add = round_success_adjustment_lower } } } if = { limit = { scope:sc_defender.var:current_round = round_success_threshold_lowest } debug_log = "single combat variable error-check: round_success_threshold_lowest" debug_log_scopes = yes scope:sc_defender = { change_variable = { name = success_threshold add = round_success_adjustment_lowest } } } # Check to see if either character has achieved a suitable success score. calculate_success_chances_effect = yes ## Check scope:sc_attacker first, seeing if they have more success chance than the minimum threshold for victory. if = { limit = { scope:sc_attacker.var:sc_attacker_success_check >= scope:sc_defender.var:success_threshold # Excepting things if the match is fixed. NOT = { scope:fixed = flag:sc_defender } } save_scope_value_as = { name = sc_finished value = yes } scope:sc_attacker = { save_scope_as = sc_victor } scope:sc_defender = { save_scope_as = sc_loser } save_scope_value_as = { name = victory_type value = flag:skill } } ## Then check scope:sc_defender, performing the same calculation in reverse. else_if = { limit = { scope:sc_defender.var:sc_defender_success_check >= scope:sc_defender.var:success_threshold # Excepting things if the match is fixed. NOT = { scope:fixed = flag:sc_attacker } } save_scope_value_as = { name = sc_finished value = yes } scope:sc_defender = { save_scope_as = sc_victor } scope:sc_attacker = { save_scope_as = sc_loser } save_scope_value_as = { name = victory_type value = flag:skill } } # If we have no victor yet, and we're past the first round, look at injuries. ## Set up injury risks for this round; we do this regardless, since we look at these to work out injury chances for the desc block. calculate_injury_risks_effect = yes if = { limit = { NOT = { exists = scope:sc_finished } scope:sc_defender.var:current_round > 1 } # Check scope:sc_attacker to see if they can injure themselves due to having more risk than success. if = { limit = { scope:sc_attacker.var:sc_attacker_injury_risk_check >= scope:sc_attacker.var:sc_attacker_duel_success_score # Excepting things if the match is fixed. NOT = { scope:fixed = flag:sc_defender } } random = { chance = { value = 0 add = scope:sc_attacker.var:sc_attacker_injury_risk_check subtract = scope:sc_attacker.var:sc_attacker_duel_success_score } save_scope_value_as = { name = sc_finished value = yes } scope:sc_defender = { save_scope_as = sc_victor } scope:sc_attacker = { save_scope_as = sc_loser } save_scope_value_as = { name = victory_type value = flag:mistake } } } # Then check scope:sc_defender in the same fashion. if = { limit = { scope:sc_defender.var:sc_defender_injury_risk_check >= scope:sc_defender.var:sc_defender_duel_success_score # Excepting things if the match is fixed. NOT = { scope:fixed = flag:sc_attacker } } random = { chance = { value = 0 add = scope:sc_defender.var:sc_defender_injury_risk_check subtract = scope:sc_defender.var:sc_defender_duel_success_score } save_scope_value_as = { name = sc_finished value = yes } scope:sc_attacker = { save_scope_as = sc_victor } scope:sc_defender = { save_scope_as = sc_loser } save_scope_value_as = { name = victory_type value = flag:mistake } } } } # If we now have a victor, work out the cleanup. if = { limit = { exists = scope:sc_finished } finalise_combat_results_effect = yes } # If we don't, and this round is at or over the round_cap_limit, enter into sudden death. else_if = { limit = { scope:sc_defender.var:current_round >= round_cap_limit } # Has the match been fixed? ## ... for scope:sc_attacker. if = { limit = { scope:fixed = flag:sc_attacker } save_scope_value_as = { name = sc_finished value = yes } scope:sc_attacker = { save_scope_as = sc_victor } scope:sc_defender = { save_scope_as = sc_loser } save_scope_value_as = { name = victory_type value = flag:sudden_death } } ## ... for scope:sc_defender. else_if = { limit = { scope:fixed = flag:sc_defender } save_scope_value_as = { name = sc_finished value = yes } scope:sc_defender = { save_scope_as = sc_victor } scope:sc_attacker = { save_scope_as = sc_loser } save_scope_value_as = { name = victory_type value = flag:sudden_death } } # If scope:sc_attacker has the highest prowess, then they win. else_if = { limit = { scope:sc_attacker.prowess > scope:sc_defender.prowess } save_scope_value_as = { name = sc_finished value = yes } scope:sc_attacker = { save_scope_as = sc_victor } scope:sc_defender = { save_scope_as = sc_loser } save_scope_value_as = { name = victory_type value = flag:sudden_death } } # If scope:sc_defender has the highest prowess, then *they* win. else_if = { limit = { scope:sc_defender.prowess > scope:sc_attacker.prowess } save_scope_value_as = { name = sc_finished value = yes } scope:sc_defender = { save_scope_as = sc_victor } scope:sc_attacker = { save_scope_as = sc_loser } save_scope_value_as = { name = victory_type value = flag:sudden_death } } # Otherwise, their prowess must be even, so we do a toss-up. else = { random_list = { #Scope:sc_attacker wins. 50 = { save_scope_value_as = { name = sc_finished value = yes } scope:sc_attacker = { save_scope_as = sc_victor } scope:sc_defender = { save_scope_as = sc_loser } save_scope_value_as = { name = victory_type value = flag:sudden_death } } #Scope:sc_defender wins. 50 = { save_scope_value_as = { name = sc_finished value = yes } scope:sc_defender = { save_scope_as = sc_victor } scope:sc_attacker = { save_scope_as = sc_loser } save_scope_value_as = { name = victory_type value = flag:sudden_death } } } } #Sort the end of combat. finalise_combat_results_effect = yes } # If we don't, and we've not yet hit the round_cap_limit, increment the round_number & fire off the next round. else = { scope:sc_defender = { # We change the round number right at the end, so that it doesn't mess up any calculations elsewhere. change_variable = { name = current_round add = 1 } trigger_event = single_combat.0001 } } } } ################################################## # Results Events # by Ewan Cowhig Croft # 0031 - 0050 ################################################## scripted_effect sce_loser_end_result_tooltip_effect = { #Clarify the results. if = { limit = { scope:victory_type = flag:skill } custom_tooltip = single_combat.0031.desc.result.skill } else_if = { limit = { scope:victory_type = flag:mistake } custom_tooltip = single_combat.0031.desc.result.mistake } else_if = { limit = { scope:victory_type = flag:sudden_death } custom_tooltip = single_combat.0031.desc.result.sudden_death } } scripted_effect sce_victor_end_result_tooltip_effect = { #Clarify the results. if = { limit = { scope:victory_type = flag:skill } custom_tooltip = single_combat.0041.desc.result.skill } else_if = { limit = { scope:victory_type = flag:mistake } custom_tooltip = single_combat.0041.desc.result.mistake } else_if = { limit = { scope:victory_type = flag:sudden_death } custom_tooltip = single_combat.0041.desc.result.sudden_death } } # scope:sc_loser's confirmation event. single_combat.0031 = { type = character_event window = duel_event title = single_combat.0031.t desc = { first_valid = { # Are we in scope:sc_defender's POV? triggered_desc = { trigger = { this = scope:sc_defender } desc = { # Our POV tells us that we did X. triggered_desc = { #This trigger should always exist, but the desc structure is required for code reasons. trigger = { always = yes } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_defender_last_move = flag:wait_and_hope } desc = single_combat.0031.desc.sc_defender.wait_and_hope } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:unsure_attack } desc = single_combat.0031.desc.sc_defender.unsure_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:enthusiastic_onslaught } desc = single_combat.0031.desc.sc_defender.enthusiastic_onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hail_mary } desc = single_combat.0031.desc.sc_defender.hail_mary } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:pocket_sand } desc = single_combat.0031.desc.sc_defender.pocket_sand } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:nut_em } desc = single_combat.0031.desc.sc_defender.nut_em } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:guard } desc = single_combat.0031.desc.sc_defender.guard } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:probing_attack } desc = single_combat.0031.desc.sc_defender.probing_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:onslaught } desc = single_combat.0031.desc.sc_defender.onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:surprise_attack } desc = single_combat.0031.desc.sc_defender.surprise_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:taunt } desc = single_combat.0031.desc.sc_defender.taunt } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:put_the_boot_in } desc = single_combat.0031.desc.sc_defender.put_the_boot_in } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:strict_guard } desc = single_combat.0031.desc.sc_defender.strict_guard } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:confident_attack } desc = single_combat.0031.desc.sc_defender.confident_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:expert_onslaught } desc = single_combat.0031.desc.sc_defender.expert_onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:attempt_disarm } desc = single_combat.0031.desc.sc_defender.attempt_disarm } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:tire_opponent } desc = single_combat.0031.desc.sc_defender.tire_opponent } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:reason_you_suck_speech } desc = single_combat.0031.desc.sc_defender.reason_you_suck_speech } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:technique_from_legend } desc = single_combat.0031.desc.sc_defender.technique_from_legend } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:like_a_viper } desc = single_combat.0031.desc.sc_defender.like_a_viper } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:pocket_silver } desc = single_combat.0031.desc.sc_defender.pocket_silver } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:martial_voice } desc = single_combat.0031.desc.sc_defender.martial_voice } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:mocking_boast } desc = single_combat.0031.desc.sc_defender.mocking_boast } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:is_that_a_crocodile } desc = single_combat.0031.desc.sc_defender.is_that_a_crocodile } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:desert_warrior } desc = single_combat.0031.desc.sc_defender.desert_warrior } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:jungle_stalker } desc = single_combat.0031.desc.sc_defender.jungle_stalker } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:open_terrain_expert } desc = single_combat.0031.desc.sc_defender.open_terrain_expert } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:rough_terrain_expert } desc = single_combat.0031.desc.sc_defender.rough_terrain_expert } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:forest_fighter } desc = single_combat.0031.desc.sc_defender.forest_fighter } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:raaargh } desc = single_combat.0031.desc.sc_defender.raaargh } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hard_grit } desc = single_combat.0031.desc.sc_defender.hard_grit } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:feint_and_stab } desc = single_combat.0031.desc.sc_defender.feint_and_stab } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:butchery } desc = single_combat.0031.desc.sc_defender.butchery } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:stoic_veteran } desc = single_combat.0031.desc.sc_defender.stoic_veteran } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:blade_dance } desc = single_combat.0031.desc.sc_defender.blade_dance } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:wrath_of_highgod } desc = single_combat.0031.desc.sc_defender.wrath_of_highgod } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hurt_me_better } desc = single_combat.0031.desc.sc_defender.hurt_me_better } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:special_fallback } desc = single_combat.0031.desc.sc_defender.special_fallback } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:something_to_hide } desc = single_combat.0031.desc.sc_defender.something_to_hide } } } } # And scope:sc_attacker successfully countered with Y. triggered_desc = { #This trigger should always exist, but the desc structure is required for code reasons. trigger = { always = yes } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0031.desc.opponent_response.wait_and_hope } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0031.desc.opponent_response.unsure_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0031.desc.opponent_response.enthusiastic_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0031.desc.opponent_response.hail_mary } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0031.desc.opponent_response.pocket_sand } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0031.desc.opponent_response.nut_em } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0031.desc.opponent_response.guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0031.desc.opponent_response.probing_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0031.desc.opponent_response.onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0031.desc.opponent_response.surprise_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0031.desc.opponent_response.taunt } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0031.desc.opponent_response.put_the_boot_in } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0031.desc.opponent_response.strict_guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0031.desc.opponent_response.confident_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0031.desc.opponent_response.expert_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0031.desc.opponent_response.attempt_disarm } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0031.desc.opponent_response.tire_opponent } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0031.desc.opponent_response.reason_you_suck_speech } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0031.desc.opponent_response.technique_from_legend } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0031.desc.opponent_response.like_a_viper } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0031.desc.opponent_response.pocket_silver } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0031.desc.opponent_response.martial_voice } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0031.desc.opponent_response.mocking_boast } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:is_that_a_crocodile } desc = single_combat.0031.desc.opponent_response.is_that_a_crocodile } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0031.desc.opponent_response.desert_warrior } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0031.desc.opponent_response.jungle_stalker } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0031.desc.opponent_response.open_terrain_expert } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert } desc = single_combat.0031.desc.opponent_response.rough_terrain_expert } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0031.desc.opponent_response.forest_fighter } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0031.desc.opponent_response.raaargh } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0031.desc.opponent_response.hard_grit } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0031.desc.opponent_response.feint_and_stab } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0031.desc.opponent_response.butchery } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0031.desc.opponent_response.stoic_veteran } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0031.desc.opponent_response.blade_dance } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0031.desc.opponent_response.wrath_of_highgod } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0031.desc.opponent_response.hurt_me_better } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0031.desc.opponent_response.special_fallback } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:something_to_hide } desc = single_combat.0031.desc.opponent_response.something_to_hide } } } } # Leading to Z-1: injury. triggered_desc = { trigger = { duel_will_end_in_my_death_trigger = no } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0031.desc.opponent_response.wait_and_hope.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0031.desc.opponent_response.unsure_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0031.desc.opponent_response.enthusiastic_onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0031.desc.opponent_response.hail_mary.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0031.desc.opponent_response.pocket_sand.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0031.desc.opponent_response.nut_em.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0031.desc.opponent_response.guard.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0031.desc.opponent_response.probing_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0031.desc.opponent_response.onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0031.desc.opponent_response.surprise_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0031.desc.opponent_response.taunt.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0031.desc.opponent_response.put_the_boot_in.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0031.desc.opponent_response.strict_guard.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0031.desc.opponent_response.confident_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0031.desc.opponent_response.expert_onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0031.desc.opponent_response.attempt_disarm.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0031.desc.opponent_response.tire_opponent.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0031.desc.opponent_response.reason_you_suck_speech.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0031.desc.opponent_response.technique_from_legend.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0031.desc.opponent_response.like_a_viper.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0031.desc.opponent_response.pocket_silver.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0031.desc.opponent_response.martial_voice.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0031.desc.opponent_response.mocking_boast.injury } # No need for an is_that_a_crocodile, as it's never just an injury. triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0031.desc.opponent_response.desert_warrior.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0031.desc.opponent_response.jungle_stalker.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0031.desc.opponent_response.open_terrain_expert.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0031.desc.opponent_response.rough_terrain_expert.injury.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0031.desc.opponent_response.rough_terrain_expert.injury.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0031.desc.opponent_response.forest_fighter.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0031.desc.opponent_response.raaargh.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0031.desc.opponent_response.hard_grit.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0031.desc.opponent_response.feint_and_stab.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0031.desc.opponent_response.butchery.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0031.desc.opponent_response.stoic_veteran.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0031.desc.opponent_response.blade_dance.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0031.desc.opponent_response.wrath_of_highgod.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0031.desc.opponent_response.hurt_me_better.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0031.desc.opponent_response.special_fallback.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:something_to_hide } desc = single_combat.0031.desc.opponent_response.something_to_hide.injury } } } } # Or Z-2: death. triggered_desc = { trigger = { duel_will_end_in_my_death_trigger = yes } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0031.desc.opponent_response.wait_and_hope.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0031.desc.opponent_response.unsure_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0031.desc.opponent_response.enthusiastic_onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0031.desc.opponent_response.hail_mary.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0031.desc.opponent_response.pocket_sand.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0031.desc.opponent_response.nut_em.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0031.desc.opponent_response.guard.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0031.desc.opponent_response.probing_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0031.desc.opponent_response.onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0031.desc.opponent_response.surprise_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0031.desc.opponent_response.taunt.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0031.desc.opponent_response.put_the_boot_in.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0031.desc.opponent_response.strict_guard.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0031.desc.opponent_response.confident_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0031.desc.opponent_response.expert_onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0031.desc.opponent_response.attempt_disarm.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0031.desc.opponent_response.tire_opponent.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0031.desc.opponent_response.reason_you_suck_speech.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0031.desc.opponent_response.technique_from_legend.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0031.desc.opponent_response.like_a_viper.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0031.desc.opponent_response.pocket_silver.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0031.desc.opponent_response.martial_voice.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0031.desc.opponent_response.mocking_boast.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:is_that_a_crocodile } desc = single_combat.0031.desc.opponent_response.is_that_a_crocodile.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0031.desc.opponent_response.desert_warrior.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0031.desc.opponent_response.jungle_stalker.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0031.desc.opponent_response.open_terrain_expert.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0031.desc.opponent_response.rough_terrain_expert.fatality.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0031.desc.opponent_response.rough_terrain_expert.fatality.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0031.desc.opponent_response.forest_fighter.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0031.desc.opponent_response.raaargh.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0031.desc.opponent_response.hard_grit.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0031.desc.opponent_response.feint_and_stab.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0031.desc.opponent_response.butchery.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0031.desc.opponent_response.stoic_veteran.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0031.desc.opponent_response.blade_dance.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0031.desc.opponent_response.wrath_of_highgod.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0031.desc.opponent_response.hurt_me_better.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0031.desc.opponent_response.special_fallback.fatality } # No need for a something_to_hide, as it's never fatal. } } } } } # Or scope:sc_attacker's? triggered_desc = { trigger = { this = scope:sc_attacker } desc = { # Our POV tells us that we went straight in with Y. triggered_desc = { #This trigger should always exist, but the desc structure is required for code reasons. trigger = { always = yes } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0031.desc.sc_attacker.wait_and_hope } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0031.desc.sc_attacker.unsure_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0031.desc.sc_attacker.enthusiastic_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0031.desc.sc_attacker.hail_mary } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0031.desc.sc_attacker.pocket_sand } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0031.desc.sc_attacker.nut_em } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0031.desc.sc_attacker.guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0031.desc.sc_attacker.probing_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0031.desc.sc_attacker.onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0031.desc.sc_attacker.surprise_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0031.desc.sc_attacker.taunt } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in has_trait = one_legged } desc = single_combat.0031.desc.sc_attacker.put_the_boot_in.peg_leg } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0031.desc.sc_attacker.put_the_boot_in.fallback } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0031.desc.sc_attacker.strict_guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0031.desc.sc_attacker.confident_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0031.desc.sc_attacker.expert_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0031.desc.sc_attacker.attempt_disarm } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0031.desc.sc_attacker.tire_opponent } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0031.desc.sc_attacker.reason_you_suck_speech } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0031.desc.sc_attacker.technique_from_legend } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0031.desc.sc_attacker.like_a_viper } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0031.desc.sc_attacker.pocket_silver } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0031.desc.sc_attacker.martial_voice } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0031.desc.sc_attacker.mocking_boast } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:is_that_a_crocodile } desc = single_combat.0031.desc.sc_attacker.is_that_a_crocodile } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0031.desc.sc_attacker.desert_warrior } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0031.desc.sc_attacker.jungle_stalker } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0031.desc.sc_attacker.open_terrain_expert } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0031.desc.sc_attacker.rough_terrain_expert.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0031.desc.sc_attacker.rough_terrain_expert.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0031.desc.sc_attacker.forest_fighter } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0031.desc.sc_attacker.raaargh } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0031.desc.sc_attacker.hard_grit } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0031.desc.sc_attacker.feint_and_stab } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0031.desc.sc_attacker.butchery } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0031.desc.sc_attacker.stoic_veteran } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0031.desc.sc_attacker.blade_dance } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0031.desc.sc_attacker.wrath_of_highgod } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0031.desc.sc_attacker.hurt_me_better } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0031.desc.sc_attacker.special_fallback } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:something_to_hide } desc = single_combat.0031.desc.sc_attacker.something_to_hide } } } } # Leading to Z-1: injury. triggered_desc = { trigger = { duel_will_end_in_my_death_trigger = no } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0031.desc.sc_attacker.wait_and_hope.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0031.desc.sc_attacker.unsure_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0031.desc.sc_attacker.enthusiastic_onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0031.desc.sc_attacker.hail_mary.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0031.desc.sc_attacker.pocket_sand.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0031.desc.sc_attacker.nut_em.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0031.desc.sc_attacker.guard.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0031.desc.sc_attacker.probing_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0031.desc.sc_attacker.onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0031.desc.sc_attacker.surprise_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0031.desc.sc_attacker.taunt.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0031.desc.sc_attacker.put_the_boot_in.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0031.desc.sc_attacker.strict_guard.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0031.desc.sc_attacker.confident_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0031.desc.sc_attacker.expert_onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0031.desc.sc_attacker.attempt_disarm.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0031.desc.sc_attacker.tire_opponent.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0031.desc.sc_attacker.reason_you_suck_speech.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0031.desc.sc_attacker.technique_from_legend.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0031.desc.sc_attacker.like_a_viper.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0031.desc.sc_attacker.pocket_silver.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0031.desc.sc_attacker.martial_voice.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0031.desc.sc_attacker.mocking_boast.injury } # No need for an is_that_a_crocodile, as it's never just an injury. triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0031.desc.sc_attacker.desert_warrior.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0031.desc.sc_attacker.jungle_stalker.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0031.desc.sc_attacker.open_terrain_expert.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0031.desc.sc_attacker.rough_terrain_expert.injury.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0031.desc.sc_attacker.rough_terrain_expert.injury.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0031.desc.sc_attacker.forest_fighter.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0031.desc.sc_attacker.raaargh.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0031.desc.sc_attacker.hard_grit.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0031.desc.sc_attacker.feint_and_stab.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0031.desc.sc_attacker.butchery.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0031.desc.sc_attacker.stoic_veteran.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0031.desc.sc_attacker.blade_dance.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0031.desc.sc_attacker.wrath_of_highgod.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0031.desc.sc_attacker.hurt_me_better.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0031.desc.sc_attacker.special_fallback.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:something_to_hide } desc = single_combat.0031.desc.sc_attacker.something_to_hide.injury } } } } # Or Z-2: death. triggered_desc = { trigger = { duel_will_end_in_my_death_trigger = yes } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0031.desc.sc_attacker.wait_and_hope.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0031.desc.sc_attacker.unsure_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0031.desc.sc_attacker.enthusiastic_onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0031.desc.sc_attacker.hail_mary.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0031.desc.sc_attacker.pocket_sand.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0031.desc.sc_attacker.nut_em.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0031.desc.sc_attacker.guard.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0031.desc.sc_attacker.probing_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0031.desc.sc_attacker.onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0031.desc.sc_attacker.surprise_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0031.desc.sc_attacker.taunt.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0031.desc.sc_attacker.put_the_boot_in.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0031.desc.sc_attacker.strict_guard.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0031.desc.sc_attacker.confident_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0031.desc.sc_attacker.expert_onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0031.desc.sc_attacker.attempt_disarm.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0031.desc.sc_attacker.tire_opponent.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0031.desc.sc_attacker.reason_you_suck_speech.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0031.desc.sc_attacker.technique_from_legend.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0031.desc.sc_attacker.like_a_viper.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0031.desc.sc_attacker.pocket_silver.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0031.desc.sc_attacker.martial_voice.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0031.desc.sc_attacker.mocking_boast.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:is_that_a_crocodile } desc = single_combat.0031.desc.sc_attacker.is_that_a_crocodile.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0031.desc.sc_attacker.desert_warrior.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0031.desc.sc_attacker.jungle_stalker.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0031.desc.sc_attacker.open_terrain_expert.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0031.desc.sc_attacker.rough_terrain_expert.fatality.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0031.desc.sc_attacker.rough_terrain_expert.fatality.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0031.desc.sc_attacker.forest_fighter.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0031.desc.sc_attacker.raaargh.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0031.desc.sc_attacker.hard_grit.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0031.desc.sc_attacker.feint_and_stab.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0031.desc.sc_attacker.butchery.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0031.desc.sc_attacker.stoic_veteran.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0031.desc.sc_attacker.blade_dance.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0031.desc.sc_attacker.wrath_of_highgod.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0031.desc.sc_attacker.hurt_me_better.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0031.desc.sc_attacker.special_fallback.fatality } # No need for a something_to_hide, as it's never fatal. } } } } } } } theme = skull left_portrait = { character = scope:sc_loser triggered_animation = { trigger = { portrait_should_wield_sword_trigger = yes } animation = sword_yield_start } animation = pain } right_portrait = { character = scope:sc_victor scripted_animation = duel_celebrate } # Background Logic override_background = { trigger = { scope:locale = flag:terrain_scope } reference = terrain_scope } override_background = { trigger = { scope:locale = flag:battlefield } reference = battlefield } override_background = { trigger = { scope:locale = flag:alley_night } reference = alley_night } override_background = { trigger = { scope:locale = flag:alley_day } reference = alley_day } override_background = { trigger = { scope:locale = flag:temple } reference = temple } override_background = { trigger = { scope:locale = flag:corridor_night } reference = corridor_night } override_background = { trigger = { scope:locale = flag:corridor_day } reference = corridor_day } override_background = { trigger = { scope:locale = flag:courtyard } reference = courtyard } override_background = { trigger = { scope:locale = flag:dungeon } reference = dungeon } override_background = { trigger = { scope:locale = flag:docks } reference = docks } override_background = { trigger = { scope:locale = flag:feast } reference = feast } override_background = { trigger = { scope:locale = flag:market } reference = market } override_background = { trigger = { scope:locale = flag:tavern } reference = tavern } override_background = { trigger = { scope:locale = flag:throne_room } reference = throne_room } override_background = { trigger = { scope:locale = flag:army_camp } reference = army_camp } immediate = { #Death/wounding enacted elsewhere. if = { limit = { duel_will_end_in_my_death_trigger = yes } show_as_tooltip = { death = { killer = scope:sc_victor death_reason = death_duel } } } else_if = { limit = { scope:fatality = flag:practice } # If we're only practicing, there's no harm done. custom_tooltip = single_combat.result.tt.practice_no_wounds } else = { show_as_tooltip = { increase_wounds_no_death_effect = { REASON = duel } } } # Add Tournament Trait XP if = { limit = { has_trait = tourney_participant } add_trait_xp = { trait = tourney_participant track = foot value = { 1 3 } } } scope:sc_loser = { every_vassal = { limit = { has_vassal_stance = belligerent } add_opinion = { modifier = liege_lost_duel target = scope:sc_loser } } } #Acknowledge loss of temporary combat modifiers. custom_tooltip = single_combat.result.tt.temporary_modifiers_removed # Damage equipped artifacts for loser may_damage_artifact_effect = { TYPE = primary_armament CHANCE = 66 # 33% chance of no damage PERCENT = 15 # 5-15 percent of max durability lost } may_damage_artifact_effect = { TYPE = armor CHANCE = 66 # 33% chance of no damage PERCENT = 15 # 5-15 percent of max durability lost } #Nomads fighting upstart family members event if = { limit = { scope:sc_loser = { has_character_flag = duelling_defecting_family_flag this = scope:sc_attacker } } scope:sc_loser = { set_designated_heir = scope:sc_victor remove_character_flag = duelling_defecting_family_flag } } } # I die! option = { # Standard death-scream. name = { trigger = { scope:death_rattle = flag:scream } text = single_combat.0031.a.scream } # Wordless death. name = { trigger = { scope:death_rattle = flag:wordless } text = single_combat.0031.a.wordless } # Muffled death. name = { trigger = { scope:death_rattle = flag:muffled } text = single_combat.0031.a.muffled } # Choking death. name = { trigger = { scope:death_rattle = flag:choking } text = single_combat.0031.a.choking } # Pleading death. name = { trigger = { scope:death_rattle = flag:pleading_screams } text = single_combat.0031.a.pleading } # Soulmate death. name = { trigger = { scope:death_rattle = flag:soulmate } text = single_combat.0031.a.soulmate } # Sinner death. name = { trigger = { scope:death_rattle = flag:sinner } text = single_combat.0031.a.sinner } # Saint death. name = { trigger = { scope:death_rattle = flag:saint } text = single_combat.0031.a.saint } # Legend death. name = { trigger = { scope:death_rattle = flag:legend } text = single_combat.0031.a.legend } # Valhalla death. name = { trigger = { scope:death_rattle = flag:valhalla } text = single_combat.0031.a.valhalla } # Best Friend death. name = { trigger = { scope:death_rattle = flag:best_friend } text = single_combat.0031.a.best_friend } # Killed by rival death. name = { trigger = { scope:death_rattle = flag:killed_by_rival } text = single_combat.0031.a.killed_by_rival } # Killed by nemesis death. name = { trigger = { scope:death_rattle = flag:killed_by_nemesis } text = single_combat.0031.a.killed_by_nemesis } # Killed by spouse death. name = { trigger = { scope:death_rattle = flag:killed_by_spouse } text = single_combat.0031.a.killed_by_spouse } # Killed by your HoF death. name = { trigger = { scope:death_rattle = flag:killed_by_your_head_of_faith } text = single_combat.0031.a.killed_by_your_head_of_faith } # Killed by another HoF death. name = { trigger = { scope:death_rattle = flag:killed_by_another_head_of_faith } text = single_combat.0031.a.killed_by_another_head_of_faith } # Killed by cultural head death. name = { trigger = { scope:death_rattle = flag:killed_by_cultural_head } text = single_combat.0031.a.killed_by_cultural_head } # Killed by house head death. name = { trigger = { scope:death_rattle = flag:killed_by_house_head } text = single_combat.0031.a.killed_by_house_head } # Killed by dynasty head death. name = { trigger = { scope:death_rattle = flag:killed_by_dynasty_head } text = single_combat.0031.a.killed_by_dynasty_head } # Killed by close or extended family death. name = { trigger = { scope:death_rattle = flag:killed_by_close_or_extended_family } text = single_combat.0031.a.killed_by_close_or_extended_family } # Killed by friend or lover. name = { trigger = { scope:death_rattle = flag:killed_by_friend_or_lover } text = single_combat.0031.a.killed_by_friend_or_lover } # Killed by soulmate. name = { trigger = { scope:death_rattle = flag:killed_by_soulmate } text = single_combat.0031.a.killed_by_soulmate } # Killed by best friend. name = { trigger = { scope:death_rattle = flag:killed_by_best_friend } text = single_combat.0031.a.killed_by_best_friend } trigger = { duel_will_end_in_my_death_trigger = yes } #Confirmation of the duel ending & explanation. sce_loser_end_result_tooltip_effect = yes #No stress for single-option events. #No AI chance needed for single-option events. } # Yield! Yield! option = { name = single_combat.0031.b trigger = { duel_will_end_in_my_death_trigger = no } #Confirmation of the duel ending & explanation. sce_loser_end_result_tooltip_effect = yes #No stress involved, as we don't want to force rivalries out of every duel. ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = -0.75 ai_energy = -0.25 } } } # You will rue the day you messed with scope:sc_loser! option = { name = single_combat.0031.c trigger = { duel_will_end_in_my_death_trigger = no } #Confirmation of the duel ending & explanation. sce_loser_end_result_tooltip_effect = yes #Aaaaand set-up some rivalry. if = { limit = { NOT = { has_relation_rival = scope:sc_victor } } progress_towards_rival_effect = { REASON = rival_lost_duel CHARACTER = scope:sc_victor OPINION = 0 } } # Consolation prize for being a sore loser to a rival. else = { add_stress = minor_stress_loss } stress_impact = { arrogant = minor_stress_impact_loss vengeful = medium_stress_impact_loss humble = minor_stress_impact_gain forgiving = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_energy = 0.25 } modifier = { #Weight up for stress. add = 10 has_trait = arrogant } modifier = { #Weight up for stress. add = 20 has_trait = vengeful } modifier = { #Weight down for stress. add = -10 has_trait = humble } modifier = { #Weight down for stress. add = -20 has_trait = forgiving } } } after = { if = { #If dueled an AI, clear everything limit = { scope:sc_victor = { is_ai = yes } } single_combat_clean_shirtlessness_effect = { ATTACKER = scope:sc_loser DEFENDER = scope:sc_victor } } else_if = { #If both players, clear own only limit = { is_ai = no } if = { limit = { has_character_flag = single_combat_stripped_to_waist } remove_character_flag = single_combat_stripped_to_waist } else_if = { # If a player who dueled a player, clear only own flags limit = { has_character_flag = single_combat_duel_armor } remove_character_flag = single_combat_duel_armor } } if = { #If dueled an AI, clear everything limit = { scope:sc_victor = { is_ai = yes } } single_combat_clean_temp_weapon_effect = { ATTACKER = scope:sc_loser DEFENDER = scope:sc_victor } } else_if = { #If both players, clear own only limit = { is_ai = no } if = { #check for variables set up in set_temporary_signature_weapon limit = { OR = { has_variable = og_signature_weapon has_variable = temporary_signature_weapon } } if = { #remove the signature_weapon variable if the character didn't have anything before limit = { var:og_signature_weapon = flag:no_signature_weapon_yet } remove_variable = signature_weapon } else = { #restore the original signature_weapon set_variable = { name = signature_weapon value = var:og_signature_weapon } } #remove all variables set up in set_temporary_signature_weapon remove_variable = temporary_signature_weapon remove_variable = og_signature_weapon } } } } # scope:sc_victor's confirmation event. single_combat.0041 = { type = character_event window = duel_event title = single_combat.0041.t desc = { first_valid = { # Are we in scope:sc_defender's POV? triggered_desc = { trigger = { this = scope:sc_defender } desc = { # Our POV tells us that we did X. triggered_desc = { #This trigger should always exist, but the desc structure is required for code reasons. trigger = { always = yes } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_defender_last_move = flag:wait_and_hope } desc = single_combat.0041.desc.sc_defender.wait_and_hope } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:unsure_attack } desc = single_combat.0041.desc.sc_defender.unsure_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:enthusiastic_onslaught } desc = single_combat.0041.desc.sc_defender.enthusiastic_onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hail_mary } desc = single_combat.0041.desc.sc_defender.hail_mary } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:pocket_sand } desc = single_combat.0041.desc.sc_defender.pocket_sand } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:nut_em } desc = single_combat.0041.desc.sc_defender.nut_em } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:guard } desc = single_combat.0041.desc.sc_defender.guard } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:probing_attack } desc = single_combat.0041.desc.sc_defender.probing_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:onslaught } desc = single_combat.0041.desc.sc_defender.onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:surprise_attack } desc = single_combat.0041.desc.sc_defender.surprise_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:taunt } desc = single_combat.0041.desc.sc_defender.taunt } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:put_the_boot_in } desc = single_combat.0041.desc.sc_defender.put_the_boot_in } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:strict_guard } desc = single_combat.0041.desc.sc_defender.strict_guard } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:confident_attack } desc = single_combat.0041.desc.sc_defender.confident_attack } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:expert_onslaught } desc = single_combat.0041.desc.sc_defender.expert_onslaught } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:attempt_disarm } desc = single_combat.0041.desc.sc_defender.attempt_disarm } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:tire_opponent } desc = single_combat.0041.desc.sc_defender.tire_opponent } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:reason_you_suck_speech } desc = single_combat.0041.desc.sc_defender.reason_you_suck_speech } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:technique_from_legend } desc = single_combat.0041.desc.sc_defender.technique_from_legend } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:like_a_viper } desc = single_combat.0041.desc.sc_defender.like_a_viper } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:pocket_silver } desc = single_combat.0041.desc.sc_defender.pocket_silver } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:martial_voice } desc = single_combat.0041.desc.sc_defender.martial_voice } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:mocking_boast } desc = single_combat.0041.desc.sc_defender.mocking_boast } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:is_that_a_crocodile } desc = single_combat.0041.desc.sc_defender.is_that_a_crocodile } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:desert_warrior } desc = single_combat.0041.desc.sc_defender.desert_warrior } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:jungle_stalker } desc = single_combat.0041.desc.sc_defender.jungle_stalker } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:open_terrain_expert } desc = single_combat.0041.desc.sc_defender.open_terrain_expert } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:rough_terrain_expert } desc = single_combat.0041.desc.sc_defender.rough_terrain_expert } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:forest_fighter } desc = single_combat.0041.desc.sc_defender.forest_fighter } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:raaargh } desc = single_combat.0041.desc.sc_defender.raaargh } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hard_grit } desc = single_combat.0041.desc.sc_defender.hard_grit } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:feint_and_stab } desc = single_combat.0041.desc.sc_defender.feint_and_stab } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:butchery } desc = single_combat.0041.desc.sc_defender.butchery } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:stoic_veteran } desc = single_combat.0041.desc.sc_defender.stoic_veteran } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:blade_dance } desc = single_combat.0041.desc.sc_defender.blade_dance } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:wrath_of_highgod } desc = single_combat.0041.desc.sc_defender.wrath_of_highgod } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:hurt_me_better } desc = single_combat.0041.desc.sc_defender.hurt_me_better } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:special_fallback } desc = single_combat.0041.desc.sc_defender.special_fallback } triggered_desc = { trigger = { scope:sc_defender_last_move = flag:something_to_hide } desc = single_combat.0041.desc.sc_defender.something_to_hide } } } } # And scope:sc_attacker failed to counter with Y. triggered_desc = { #This trigger should always exist, but the desc structure is required for code reasons. trigger = { always = yes } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0041.desc.opponent_response.wait_and_hope } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0041.desc.opponent_response.unsure_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0041.desc.opponent_response.enthusiastic_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0041.desc.opponent_response.hail_mary } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0041.desc.opponent_response.pocket_sand } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0041.desc.opponent_response.nut_em } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0041.desc.opponent_response.guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0041.desc.opponent_response.probing_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0041.desc.opponent_response.onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0041.desc.opponent_response.surprise_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0041.desc.opponent_response.taunt } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in has_trait = one_legged } desc = single_combat.0041.desc.opponent_response.put_the_boot_in.peg_leg } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0041.desc.opponent_response.put_the_boot_in.fallback } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0041.desc.opponent_response.strict_guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0041.desc.opponent_response.confident_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0041.desc.opponent_response.expert_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0041.desc.opponent_response.attempt_disarm } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0041.desc.opponent_response.tire_opponent } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0041.desc.opponent_response.reason_you_suck_speech } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0041.desc.opponent_response.technique_from_legend } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0041.desc.opponent_response.like_a_viper } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0041.desc.opponent_response.pocket_silver } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0041.desc.opponent_response.martial_voice } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0041.desc.opponent_response.mocking_boast } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:is_that_a_crocodile } desc = single_combat.0041.desc.opponent_response.is_that_a_crocodile } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0041.desc.opponent_response.desert_warrior } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0041.desc.opponent_response.jungle_stalker } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0041.desc.opponent_response.open_terrain_expert } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0041.desc.opponent_response.rough_terrain_expert.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0041.desc.opponent_response.rough_terrain_expert.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0041.desc.opponent_response.forest_fighter } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0041.desc.opponent_response.raaargh } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0041.desc.opponent_response.hard_grit } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0041.desc.opponent_response.feint_and_stab } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0041.desc.opponent_response.butchery } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0041.desc.opponent_response.stoic_veteran } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0041.desc.opponent_response.blade_dance } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0041.desc.opponent_response.wrath_of_highgod } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0041.desc.opponent_response.hurt_me_better } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0041.desc.opponent_response.special_fallback } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:something_to_hide } desc = single_combat.0041.desc.opponent_response.something_to_hide } } } } # Leading to Z-1: injury. triggered_desc = { trigger = { duel_will_end_in_opponent_death_trigger = no } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0041.desc.opponent_response.wait_and_hope.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0041.desc.opponent_response.unsure_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0041.desc.opponent_response.enthusiastic_onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0041.desc.opponent_response.hail_mary.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0041.desc.opponent_response.pocket_sand.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0041.desc.opponent_response.nut_em.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0041.desc.opponent_response.guard.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0041.desc.opponent_response.probing_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0041.desc.opponent_response.onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0041.desc.opponent_response.surprise_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0041.desc.opponent_response.taunt.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0041.desc.opponent_response.put_the_boot_in.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0041.desc.opponent_response.strict_guard.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0041.desc.opponent_response.confident_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0041.desc.opponent_response.expert_onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0041.desc.opponent_response.attempt_disarm.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0041.desc.opponent_response.tire_opponent.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0041.desc.opponent_response.reason_you_suck_speech.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0041.desc.opponent_response.technique_from_legend.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0041.desc.opponent_response.like_a_viper.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0041.desc.opponent_response.pocket_silver.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0041.desc.opponent_response.martial_voice.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0041.desc.opponent_response.mocking_boast.injury } # No need for an is_that_a_crocodile, as it's never just an injury. triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0041.desc.opponent_response.desert_warrior.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0041.desc.opponent_response.jungle_stalker.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0041.desc.opponent_response.open_terrain_expert.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0041.desc.opponent_response.rough_terrain_expert.injury.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0041.desc.opponent_response.rough_terrain_expert.injury.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0041.desc.opponent_response.forest_fighter.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0041.desc.opponent_response.raaargh.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0041.desc.opponent_response.hard_grit.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0041.desc.opponent_response.feint_and_stab.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0041.desc.opponent_response.butchery.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0041.desc.opponent_response.stoic_veteran.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0041.desc.opponent_response.blade_dance.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0041.desc.opponent_response.wrath_of_highgod.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0041.desc.opponent_response.hurt_me_better.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0041.desc.opponent_response.special_fallback.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:something_to_hide } desc = single_combat.0041.desc.opponent_response.something_to_hide.injury } } } } # Or Z-2: death. triggered_desc = { trigger = { duel_will_end_in_opponent_death_trigger = yes } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0041.desc.opponent_response.wait_and_hope.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0041.desc.opponent_response.unsure_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0041.desc.opponent_response.enthusiastic_onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0041.desc.opponent_response.hail_mary.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0041.desc.opponent_response.pocket_sand.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0041.desc.opponent_response.nut_em.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0041.desc.opponent_response.guard.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0041.desc.opponent_response.probing_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0041.desc.opponent_response.onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0041.desc.opponent_response.surprise_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0041.desc.opponent_response.taunt.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0041.desc.opponent_response.put_the_boot_in.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0041.desc.opponent_response.strict_guard.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0041.desc.opponent_response.confident_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0041.desc.opponent_response.expert_onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0041.desc.opponent_response.attempt_disarm.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0041.desc.opponent_response.tire_opponent.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0041.desc.opponent_response.reason_you_suck_speech.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0041.desc.opponent_response.technique_from_legend.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0041.desc.opponent_response.like_a_viper.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0041.desc.opponent_response.pocket_silver.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0041.desc.opponent_response.martial_voice.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0041.desc.opponent_response.mocking_boast.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:is_that_a_crocodile } desc = single_combat.0041.desc.opponent_response.is_that_a_crocodile.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0041.desc.opponent_response.desert_warrior.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0041.desc.opponent_response.jungle_stalker.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0041.desc.opponent_response.open_terrain_expert.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0041.desc.opponent_response.rough_terrain_expert.fatality.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0041.desc.opponent_response.rough_terrain_expert.fatality.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0041.desc.opponent_response.forest_fighter.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0041.desc.opponent_response.raaargh.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0041.desc.opponent_response.hard_grit.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0041.desc.opponent_response.feint_and_stab.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0041.desc.opponent_response.butchery.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0041.desc.opponent_response.stoic_veteran.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0041.desc.opponent_response.blade_dance.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0041.desc.opponent_response.wrath_of_highgod.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0041.desc.opponent_response.hurt_me_better.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0041.desc.opponent_response.special_fallback.fatality } # No need for a something_to_hide, as it's never fatal. } } } } } # Or scope:sc_attacker's? triggered_desc = { trigger = { this = scope:sc_attacker } desc = { # Our POV tells us that we went straight in with Y. triggered_desc = { #This trigger should always exist, but the desc structure is required for code reasons. trigger = { always = yes } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0041.desc.sc_attacker.wait_and_hope } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0041.desc.sc_attacker.unsure_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0041.desc.sc_attacker.enthusiastic_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0041.desc.sc_attacker.hail_mary } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0041.desc.sc_attacker.pocket_sand } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0041.desc.sc_attacker.nut_em } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0041.desc.sc_attacker.guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0041.desc.sc_attacker.probing_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0041.desc.sc_attacker.onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0041.desc.sc_attacker.surprise_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0041.desc.sc_attacker.taunt } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in has_trait = one_legged } desc = single_combat.0041.desc.sc_attacker.put_the_boot_in.peg_leg } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0041.desc.sc_attacker.put_the_boot_in.fallback } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0041.desc.sc_attacker.strict_guard } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0041.desc.sc_attacker.confident_attack } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0041.desc.sc_attacker.expert_onslaught } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0041.desc.sc_attacker.attempt_disarm } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0041.desc.sc_attacker.tire_opponent } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0041.desc.sc_attacker.reason_you_suck_speech } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0041.desc.sc_attacker.technique_from_legend } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0041.desc.sc_attacker.like_a_viper } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0041.desc.sc_attacker.pocket_silver } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0041.desc.sc_attacker.martial_voice } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0041.desc.sc_attacker.mocking_boast } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:is_that_a_crocodile } desc = single_combat.0041.desc.sc_attacker.is_that_a_crocodile } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0041.desc.sc_attacker.desert_warrior } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0041.desc.sc_attacker.jungle_stalker } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0041.desc.sc_attacker.open_terrain_expert } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0041.desc.sc_attacker.rough_terrain_expert.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0041.desc.sc_attacker.rough_terrain_expert.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0041.desc.sc_attacker.forest_fighter } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0041.desc.sc_attacker.raaargh } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0041.desc.sc_attacker.hard_grit } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0041.desc.sc_attacker.feint_and_stab } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0041.desc.sc_attacker.butchery } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0041.desc.sc_attacker.stoic_veteran } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0041.desc.sc_attacker.blade_dance } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0041.desc.sc_attacker.wrath_of_highgod } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0041.desc.sc_attacker.hurt_me_better } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0041.desc.sc_attacker.special_fallback } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:something_to_hide } desc = single_combat.0041.desc.sc_attacker.something_to_hide } } } } # Leading to Z-1: injury. triggered_desc = { trigger = { duel_will_end_in_opponent_death_trigger = no } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0041.desc.sc_attacker.wait_and_hope.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0041.desc.sc_attacker.unsure_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0041.desc.sc_attacker.enthusiastic_onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0041.desc.sc_attacker.hail_mary.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0041.desc.sc_attacker.pocket_sand.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0041.desc.sc_attacker.nut_em.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0041.desc.sc_attacker.guard.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0041.desc.sc_attacker.probing_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0041.desc.sc_attacker.onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0041.desc.sc_attacker.surprise_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0041.desc.sc_attacker.taunt.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0041.desc.sc_attacker.put_the_boot_in.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0041.desc.sc_attacker.strict_guard.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0041.desc.sc_attacker.confident_attack.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0041.desc.sc_attacker.expert_onslaught.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0041.desc.sc_attacker.attempt_disarm.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0041.desc.sc_attacker.tire_opponent.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0041.desc.sc_attacker.reason_you_suck_speech.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0041.desc.sc_attacker.technique_from_legend.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0041.desc.sc_attacker.like_a_viper.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0041.desc.sc_attacker.pocket_silver.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0041.desc.sc_attacker.martial_voice.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0041.desc.sc_attacker.mocking_boast.injury } # No need for an is_that_a_crocodile, as it's never just an injury. triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0041.desc.sc_attacker.desert_warrior.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0041.desc.sc_attacker.jungle_stalker.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0041.desc.sc_attacker.open_terrain_expert.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0041.desc.sc_attacker.rough_terrain_expert.injury.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0041.desc.sc_attacker.rough_terrain_expert.injury.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0041.desc.sc_attacker.forest_fighter.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0041.desc.sc_attacker.raaargh.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0041.desc.sc_attacker.hard_grit.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0041.desc.sc_attacker.feint_and_stab.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0041.desc.sc_attacker.butchery.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0041.desc.sc_attacker.stoic_veteran.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0041.desc.sc_attacker.blade_dance.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0041.desc.sc_attacker.wrath_of_highgod.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0041.desc.sc_attacker.hurt_me_better.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0041.desc.sc_attacker.special_fallback.injury } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:something_to_hide } desc = single_combat.0041.desc.sc_attacker.something_to_hide.injury } } } } # Or Z-2: death. triggered_desc = { trigger = { duel_will_end_in_opponent_death_trigger = yes } desc = { first_valid = { triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wait_and_hope } desc = single_combat.0041.desc.sc_attacker.wait_and_hope.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:unsure_attack } desc = single_combat.0041.desc.sc_attacker.unsure_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:enthusiastic_onslaught } desc = single_combat.0041.desc.sc_attacker.enthusiastic_onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hail_mary } desc = single_combat.0041.desc.sc_attacker.hail_mary.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_sand } desc = single_combat.0041.desc.sc_attacker.pocket_sand.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:nut_em } desc = single_combat.0041.desc.sc_attacker.nut_em.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:guard } desc = single_combat.0041.desc.sc_attacker.guard.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:probing_attack } desc = single_combat.0041.desc.sc_attacker.probing_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:onslaught } desc = single_combat.0041.desc.sc_attacker.onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:surprise_attack } desc = single_combat.0041.desc.sc_attacker.surprise_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:taunt } desc = single_combat.0041.desc.sc_attacker.taunt.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:put_the_boot_in } desc = single_combat.0041.desc.sc_attacker.put_the_boot_in.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:strict_guard } desc = single_combat.0041.desc.sc_attacker.strict_guard.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:confident_attack } desc = single_combat.0041.desc.sc_attacker.confident_attack.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:expert_onslaught } desc = single_combat.0041.desc.sc_attacker.expert_onslaught.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:attempt_disarm } desc = single_combat.0041.desc.sc_attacker.attempt_disarm.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:tire_opponent } desc = single_combat.0041.desc.sc_attacker.tire_opponent.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:reason_you_suck_speech } desc = single_combat.0041.desc.sc_attacker.reason_you_suck_speech.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:technique_from_legend } desc = single_combat.0041.desc.sc_attacker.technique_from_legend.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:like_a_viper } desc = single_combat.0041.desc.sc_attacker.like_a_viper.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:pocket_silver } desc = single_combat.0041.desc.sc_attacker.pocket_silver.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:martial_voice } desc = single_combat.0041.desc.sc_attacker.martial_voice.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:mocking_boast } desc = single_combat.0041.desc.sc_attacker.mocking_boast.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:is_that_a_crocodile } desc = single_combat.0041.desc.sc_attacker.is_that_a_crocodile.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:desert_warrior } desc = single_combat.0041.desc.sc_attacker.desert_warrior.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:jungle_stalker } desc = single_combat.0041.desc.sc_attacker.jungle_stalker.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:open_terrain_expert } desc = single_combat.0041.desc.sc_attacker.open_terrain_expert.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { rocky_locale_trigger = yes } } desc = single_combat.0041.desc.sc_attacker.rough_terrain_expert.fatality.rocky } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:rough_terrain_expert scope:sc_defender.location = { terrain = wetlands } } desc = single_combat.0041.desc.sc_attacker.rough_terrain_expert.fatality.boggy } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:forest_fighter } desc = single_combat.0041.desc.sc_attacker.forest_fighter.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:raaargh } desc = single_combat.0041.desc.sc_attacker.raaargh.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hard_grit } desc = single_combat.0041.desc.sc_attacker.hard_grit.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:feint_and_stab } desc = single_combat.0041.desc.sc_attacker.feint_and_stab.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:butchery } desc = single_combat.0041.desc.sc_attacker.butchery.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:stoic_veteran } desc = single_combat.0041.desc.sc_attacker.stoic_veteran.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:blade_dance } desc = single_combat.0041.desc.sc_attacker.blade_dance.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:wrath_of_highgod } desc = single_combat.0041.desc.sc_attacker.wrath_of_highgod.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:hurt_me_better } desc = single_combat.0041.desc.sc_attacker.hurt_me_better.fatality } triggered_desc = { trigger = { scope:sc_attacker_last_move = flag:special_fallback } desc = single_combat.0041.desc.sc_attacker.special_fallback.fatality } # No need for a something_to_hide, as it's never fatal. } } } } } } } theme = skull left_portrait = { character = scope:sc_victor scripted_animation = duel_celebrate } right_portrait = { character = scope:sc_loser triggered_animation = { trigger = { is_alive = no } animation = loss_1 } animation = sword_yield_start } # Background Logic override_background = { trigger = { scope:locale = flag:terrain_scope } reference = terrain_scope } override_background = { trigger = { scope:locale = flag:battlefield } reference = battlefield } override_background = { trigger = { scope:locale = flag:alley_night } reference = alley_night } override_background = { trigger = { scope:locale = flag:alley_day } reference = alley_day } override_background = { trigger = { scope:locale = flag:temple } reference = temple } override_background = { trigger = { scope:locale = flag:corridor_night } reference = corridor_night } override_background = { trigger = { scope:locale = flag:corridor_day } reference = corridor_day } override_background = { trigger = { scope:locale = flag:courtyard } reference = courtyard } override_background = { trigger = { scope:locale = flag:dungeon } reference = dungeon } override_background = { trigger = { scope:locale = flag:docks } reference = docks } override_background = { trigger = { scope:locale = flag:feast } reference = feast } override_background = { trigger = { scope:locale = flag:market } reference = market } override_background = { trigger = { scope:locale = flag:tavern } reference = tavern } override_background = { trigger = { scope:locale = flag:throne_room } reference = throne_room } override_background = { trigger = { scope:locale = flag:army_camp } reference = army_camp } immediate = { #Death/wounding enacted elsewhere. if = { limit = { duel_will_end_in_opponent_death_trigger = yes } scope:sc_loser = { show_as_tooltip = { death = { killer = scope:sc_victor death_reason = death_duel } } } if = { limit = { scope:sc_victor.faith = { has_doctrine = tenet_cranial_trophies } } show_as_tooltip = { tgp_cranial_trophies_beheading_effect = { KILLER = scope:sc_victor DEAD = scope:sc_loser } } } } else_if = { limit = { scope:fatality = flag:practice } # If we're only practicing, there's no harm done. custom_tooltip = single_combat.result.tt.practice_no_wounds } else = { scope:sc_loser = { show_as_tooltip = { increase_wounds_no_death_effect = { REASON = duel } } } } # Add Blademaster Trait XP if = { limit = { has_trait = lifestyle_blademaster } add_trait_xp = { trait = lifestyle_blademaster value = lifestyle_blademaster_xp_gain_minor_value } } # Add Tournament Trait XP if = { limit = { has_trait = tourney_participant } add_trait_xp = { trait = tourney_participant track = foot value = tournament_hastiludes_xp_gain_minor_value } } scope:sc_victor = { every_vassal = { limit = { has_vassal_stance = belligerent } custom = every_belligerent_vassal add_opinion = { modifier = liege_won_duel target = scope:sc_victor } } } # Add Hereward killing a Norman XP if = { limit = { has_trait = the_wake scope:sc_loser = { culture = culture:norman } } add_trait_xp = { trait = the_wake value = { 5 10 } } } # Add Nomadic Legitimacy gain if = { # Nomads gain Legitimacy from duels limit = { has_mpo_dlc_trigger = yes is_valid_for_nomadic_legitimacy_change = yes } add_legitimacy = medium_legitimacy_gain } # Increase the Strength of Ushiwakamaru if = { limit = { OR = { has_character_modifier = tgp_japan_ushiwakamaru has_character_modifier = tgp_japan_ushiwakamaru_2 has_character_modifier = tgp_japan_ushiwakamaru_3 } } change_variable = { name = ushiwakamaru_duels_won add = 1 } if = { limit = { var:ushiwakamaru_duels_won >= 60 NOT = { has_character_modifier = tgp_japan_ushiwakamaru_4 } } remove_character_modifier = tgp_japan_ushiwakamaru_3 add_character_modifier = { modifier = tgp_japan_ushiwakamaru_4 years = -1 } } else_if = { limit = { var:ushiwakamaru_duels_won >= 40 NOT = { has_character_modifier = tgp_japan_ushiwakamaru_4 } NOT = { has_character_modifier = tgp_japan_ushiwakamaru_3 } } remove_character_modifier = tgp_japan_ushiwakamaru_2 add_character_modifier = { modifier = tgp_japan_ushiwakamaru_3 years = -1 } } else_if = { limit = { var:ushiwakamaru_duels_won >= 20 NOT = { has_character_modifier = tgp_japan_ushiwakamaru_4 } NOT = { has_character_modifier = tgp_japan_ushiwakamaru_3 } NOT = { has_character_modifier = tgp_japan_ushiwakamaru_2 } } remove_character_modifier = tgp_japan_ushiwakamaru add_character_modifier = { modifier = tgp_japan_ushiwakamaru_2 years = -1 } } } # Damage equipped artifacts may_damage_artifact_effect = { TYPE = primary_armament CHANCE = 50 # 50% chance of no damage PERCENT = 10 # 5-10 percent of max durability lost } may_damage_artifact_effect = { TYPE = armor CHANCE = 50 # 50% chance of no damage PERCENT = 10 # 5-10 percent of max durability lost } #Acknowledge loss of temporary combat modifiers. custom_tooltip = single_combat.result.tt.temporary_modifiers_removed } # They died! option = { name = single_combat.0041.a trigger = { duel_will_end_in_opponent_death_trigger = yes } #Confirmation of the duel ending & explanation. sce_victor_end_result_tooltip_effect = yes #No stress for single-option events. #No AI chance needed for single-option events. } # I am victorious! option = { name = single_combat.0041.b trigger = { duel_will_end_in_opponent_death_trigger = no } #Confirmation of the duel ending & explanation. sce_victor_end_result_tooltip_effect = yes #No stress for single-option events. #No AI chance needed for single-option events. } after = { # Everyone puts their shirts back on. if = { #If dueled an AI, clear everything limit = { scope:sc_loser = { is_ai = yes } } single_combat_clean_shirtlessness_effect = { ATTACKER = scope:sc_loser DEFENDER = scope:sc_victor } } else_if = { #If both players, clear own only limit = { is_ai = no } if = { limit = { has_character_flag = single_combat_stripped_to_waist } remove_character_flag = single_combat_stripped_to_waist } else_if = { # If a player who dueled a player, clear only own flags limit = { has_character_flag = single_combat_duel_armor } remove_character_flag = single_combat_duel_armor } } # Everyone puts their signature weapons back on. if = { #If dueled an AI, clear everything limit = { scope:sc_loser = { is_ai = yes } } single_combat_clean_temp_weapon_effect = { ATTACKER = scope:sc_loser DEFENDER = scope:sc_victor } } else_if = { #If both players, clear own only limit = { is_ai = no } if = { #check for variables set up in set_temporary_signature_weapon limit = { OR = { has_variable = og_signature_weapon has_variable = temporary_signature_weapon } } if = { #remove the signature_weapon variable if the character didn't have anything before limit = { var:og_signature_weapon = flag:no_signature_weapon_yet } remove_variable = signature_weapon } else = { #restore the original signature_weapon set_variable = { name = signature_weapon value = var:og_signature_weapon } } #remove all variables set up in set_temporary_signature_weapon remove_variable = temporary_signature_weapon remove_variable = og_signature_weapon } } } } ################################################## # Test Events # by Ewan Cowhig Croft # 1001+ ################################################## # Spawn a duel, with a random knight as defender. single_combat.1001 = { hidden = yes orphan = yes immediate = { random_knight = { limit = { can_start_single_combat_trigger = yes } save_scope_as = fighter_mc_fighter_chap } configure_start_single_combat_effect = { SC_INITIATOR = root SC_ATTACKER = root SC_DEFENDER = scope:fighter_mc_fighter_chap FATALITY = default FIXED = no LOCALE = terrain_scope OUTPUT_EVENT = single_combat.1006 INVALIDATION_EVENT = single_combat.1006 #In a real event, this would obviously be a different even to the output. } } } # Spawn a duel, with a random knight as attacker. single_combat.1002 = { hidden = yes orphan = yes immediate = { random_knight = { limit = { can_start_single_combat_trigger = yes } save_scope_as = fighter_mc_fighter_chap } configure_start_single_combat_effect = { SC_INITIATOR = root SC_ATTACKER = scope:fighter_mc_fighter_chap SC_DEFENDER = root FATALITY = no FIXED = no LOCALE = terrain_scope OUTPUT_EVENT = single_combat.1006 INVALIDATION_EVENT = single_combat.1006 #In a real event, this would obviously be a different even to the output. } } } # Error suppression. single_combat.1003 = { hidden = yes orphan = yes immediate = { # Fatality flags hidden_effect = { save_scope_value_as = { name = fatality value = flag:default } save_scope_value_as = { name = fatality value = flag:possible } save_scope_value_as = { name = fatality value = flag:no } save_scope_value_as = { name = fatality value = flag:always } } # Match fixing flags hidden_effect = { save_scope_value_as = { name = fixed value = flag:sc_attacker } save_scope_value_as = { name = fixed value = flag:sc_defender } } if = { limit = { scope:fixed = flag:sc_attacker scope:fixed = flag:sc_defender } # Nothing. } # Background flags hidden_effect = { save_scope_value_as = { name = locale value = flag:terrain_scope } save_scope_value_as = { name = locale value = flag:battlefield } save_scope_value_as = { name = locale value = flag:alley_night } save_scope_value_as = { name = locale value = flag:alley_day } save_scope_value_as = { name = locale value = flag:temple } save_scope_value_as = { name = locale value = flag:corridor_night } save_scope_value_as = { name = locale value = flag:corridor_day } save_scope_value_as = { name = locale value = flag:courtyard } save_scope_value_as = { name = locale value = flag:dungeon } save_scope_value_as = { name = locale value = flag:docks } save_scope_value_as = { name = locale value = flag:feast } save_scope_value_as = { name = locale value = flag:market } save_scope_value_as = { name = locale value = flag:tavern } save_scope_value_as = { name = locale value = flag:throne_room } save_scope_value_as = { name = locale value = flag:army_camp } } # Victory type flags if = { limit = { scope:victory_type = flag:skill scope:victory_type = flag:mistake scope:victory_type = flag:sudden_death } #Nothing. } } } # Debug event to duel a character. single_combat.1004 = { type = character_event window = duel_event title = single_combat.1004.t desc = single_combat.1004.desc left_portrait = { character = scope:actor animation = anger } right_portrait = { character = scope:recipient animation = fear } theme = skull # You are the attacker, default option = { name = single_combat.1004.a configure_start_single_combat_effect = { SC_INITIATOR = scope:actor SC_ATTACKER = scope:actor SC_DEFENDER = scope:recipient FATALITY = default FIXED = no LOCALE = terrain_scope OUTPUT_EVENT = single_combat.1006 INVALIDATION_EVENT = single_combat.1006 #In a real event, this would obviously be a different even to the output. } } # You are the defender, default option = { name = single_combat.1004.b configure_start_single_combat_effect = { SC_INITIATOR = scope:actor SC_ATTACKER = scope:recipient SC_DEFENDER = scope:actor FATALITY = default FIXED = no LOCALE = terrain_scope OUTPUT_EVENT = single_combat.1006 INVALIDATION_EVENT = single_combat.1006 #In a real event, this would obviously be a different even to the output. } } # You are the attacker, fatal option = { name = single_combat.1004.c configure_start_single_combat_effect = { SC_INITIATOR = scope:actor SC_ATTACKER = scope:actor SC_DEFENDER = scope:recipient FATALITY = always FIXED = no LOCALE = terrain_scope OUTPUT_EVENT = single_combat.1006 INVALIDATION_EVENT = single_combat.1006 #In a real event, this would obviously be a different even to the output. } } # You are the defender, fatal option = { name = single_combat.1004.d configure_start_single_combat_effect = { SC_INITIATOR = scope:actor SC_ATTACKER = scope:recipient SC_DEFENDER = scope:actor FATALITY = always FIXED = no LOCALE = terrain_scope OUTPUT_EVENT = single_combat.1006 INVALIDATION_EVENT = single_combat.1006 #In a real event, this would obviously be a different even to the output. } } # You are the attack, non-lethal option = { name = single_combat.1004.e configure_start_single_combat_effect = { SC_INITIATOR = scope:actor SC_ATTACKER = scope:actor SC_DEFENDER = scope:recipient FATALITY = no FIXED = no LOCALE = terrain_scope OUTPUT_EVENT = single_combat.1006 INVALIDATION_EVENT = single_combat.1006 #In a real event, this would obviously be a different even to the output. } } # You are the defender, non-lethal option = { name = single_combat.1004.f configure_start_single_combat_effect = { SC_INITIATOR = scope:actor SC_ATTACKER = scope:recipient SC_DEFENDER = scope:actor FATALITY = no FIXED = no LOCALE = terrain_scope OUTPUT_EVENT = single_combat.1006 INVALIDATION_EVENT = single_combat.1006 #In a real event, this would obviously be a different even to the output. } } # Actually, never mind option = { name = single_combat.1004.g } after = { single_combat_apply_default_shirtlessness_effect = { ATTACKER = scope:actor DEFENDER = scope:recipient } } } # Hidden empty event for testing purposes. single_combat.1006 = { hidden = yes }