11831 lines
360 KiB
Text
11831 lines
360 KiB
Text
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
|
|
}
|