Kaleh and Nym AMLAs (#7900)

This commit is contained in:
Hejnewar 2023-10-01 22:40:32 +02:00 committed by GitHub
parent fc7a0ea1a8
commit 6fae3945de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 1208 additions and 336 deletions

View File

@ -1465,4 +1465,5 @@
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3)}
[/scenario]

View File

@ -1924,4 +1924,5 @@
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3,4)}
[/scenario]

View File

@ -2080,4 +2080,5 @@
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3,4)}
[/scenario]

View File

@ -1144,4 +1144,5 @@
{UTBS_INCLUDE utils/deaths.cfg}
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3,4,5)}
[/scenario]

View File

@ -2707,4 +2707,5 @@
{UTBS_INCLUDE utils/deaths.cfg}
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3,4,5,6,7)}
[/scenario]

View File

@ -1765,4 +1765,5 @@
{UTBS_INCLUDE utils/deaths.cfg}
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3,4,5)}
[/scenario]

View File

@ -2017,4 +2017,5 @@
{UTBS_INCLUDE utils/deaths.cfg}
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3,4,5,6)}
[/scenario]

View File

@ -651,4 +651,5 @@
[/event]
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2)}
[/scenario]

View File

@ -638,4 +638,5 @@
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2)}
[/scenario]

View File

@ -4686,4 +4686,5 @@
{UTBS_INCLUDE utils/deaths.cfg}
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3,4,5,6,7,8)}
[/scenario]

View File

@ -2815,4 +2815,5 @@
{UTBS_INCLUDE utils/deaths.cfg}
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3,4,5,6,7,8)}
[/scenario]

View File

@ -718,4 +718,5 @@
[/event]
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2)}
[/scenario]

View File

@ -1520,4 +1520,5 @@
{UTBS_INCLUDE utils/deaths.cfg}
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3,4,5,6,7,8)}
[/scenario]

View File

@ -22,7 +22,7 @@
# Events table (stuff that can be triggered with 'fire') #
#########################################################################################################
# eloh_death : causes the post-Eloh events to occur #
# create_minion : spawns one of Yechnagoth's minions #
# create_minion : spawns one of Yechnagoth's minions #
# yechnagoth_regenerate : causes Yechnagoth to fully heal #
# yechnagoth_special_attack : trigger Yechnagoth's special slowing attack #
# yechnagoth_vulnerate : vulnerates Yechnagoth #
@ -1525,4 +1525,5 @@
#undef UTBS_IN_FINAL_FIGHT
{UTBS_XP_MODIFIER}
{UTBS_CORRECT_RECALL_COST}
{UTBS_TAUNTED_AI (1,2,3,4)}
[/scenario]

File diff suppressed because it is too large Load Diff

View File

@ -1345,13 +1345,514 @@ Marksman attacks are only affected if the chance to hit is greater than 60%."
[/event]
#enddef
# AMLA abilities
#define ABILITY_OPPORTUNIST
[dummy]
id = opportunist
name = _"opportunist"
description= _ "This ability makes Kaleh attack enemies with single strike of bolas when they leave his zone of control."
[/dummy]
#enddef
#define ABILITY_OPPORTUNIST_EVENTS
[event]
name = exit hex
id = opportunist
first_time_only = no
[filter]
[filter_adjacent]
ability = opportunist
is_enemy = yes
[/filter_adjacent]
[/filter]
[store_unit]
[filter]
find_in = unit
[/filter]
variable = opportunist_hit_units
[/store_unit]
[foreach]
array=opportunist_hit_units
variable=opportunist_hit_unit
[do]
[set_variable]
name = opportunist_hit_roll
rand = 1..100
[/set_variable]
[store_unit_defense]
find_in = opportunist_hit_unit
variable = opportunist_hit_chance
[/store_unit_defense]
[if]
[variable]
name = opportunist_hit_roll
less_than_equal_to = $opportunist_hit_chance
[/variable]
[then]
[harm_unit]
[filter]
find_in = opportunist_hit_unit
[/filter]
[filter_second]
id = Kaleh
[/filter_second]
amount = 6
damage_type = impact
kill = yes
experience = yes
fire_event = yes
slowed = yes
animate = yes
[primary_attack]
name = bolas
[/primary_attack]
[/harm_unit]
[/then]
[/if]
[/do]
[/foreach]
{CLEAR_VARIABLE opportunist_hit_units,opportunist_hit_chance,opportunist_hit_roll}
[/event]
#enddef
#define WEAPON_SPECIAL_TAUNT
[dummy]
id = taunt
name = _"taunt"
description= _ "Taunts the enemy making them try to attack Kaleh no matter what for a one turn."
[/dummy]
#enddef
#define WEAPON_SPECIAL_TAUNT_EVENTS
[event]
name = attack
first_time_only = no
[filter_attack]
special_id = taunt
[/filter_attack]
[object]
id = taunted
take_only_once = no
[filter]
find_in = second_unit
[/filter]
[effect]
apply_to = new_ability
[abilities]
{ABILITY_TAUNTED}
[/abilities]
[/effect]
duration = turn end
[/object]
[/event]
#enddef
#define ABILITY_TAUNTED
[dummy]
id = taunted
name = _"taunted"
description= _ "This unit is taunted by Kaleh, it will try to attack him no matter what for one turn."
[/dummy]
#enddef
#define ABILITY_INSPIRE
[leadership]
id=inspire
value="(25 * (level - other.level + 1))"
cumulative=no
name= _ "inspire"
female_name= _ "female^inspire"
description= _ "This unit can inspire own units that are next to it, making them fight better. Adjacent own units of lower or equal level will deal 25% more damage plus 25% for each level they are below the inspiring unit."
special_note=_"The presence of this unit inspires own units next to it to deal more damage in combat, though this only applies to units of lower or equal level."
affect_self=no
[affect_adjacent]
[filter]
formula="level <= other.level"
[/filter]
[/affect_adjacent]
[/leadership]
#enddef
#define STR_COOLDOWN_NAME_2
_ "cooldown 1"#enddef
#define STR_COOLDOWN_NAME_3
_ "cooldown 2"#enddef
#define STR_COOLDOWN_RESTRICT_2
_ "After using this attack, you can't use it during your next turn."#enddef
#define STR_COOLDOWN_RESTRICT_3
_ "After using this attack, you can't use it during your next two turns."#enddef
#define WEAPON_SPECIAL_COOLDOWN X
# If two weapons have cooldown special they will conflict with each other, use with caution.
[disable]
id = cooldown_{X}
name = {STR_COOLDOWN_NAME_{X}}
description = {STR_COOLDOWN_RESTRICT_{X}}
[filter_self]
formula = "self.wml_vars.cooldown > 0"
[/filter_self]
active_on = offense
[/disable]
#enddef
#define WEAPON_SPECIAL_COOLDOWN_EVENTS X
[event]
name = attack end
id = cooldown_{X}
first_time_only = no
[filter_attack]
special_id = cooldown_{X}
[/filter_attack]
[modify_unit]
[filter]
find_in = unit
[/filter]
[set_variable]
name = cooldown
value = {X}
[/set_variable]
[/modify_unit]
[/event]
[event]
name = side 1 turn refresh
id = cooling
first_time_only = no
[modify_unit]
[filter]
[has_attack]
special_id = cooldown_{X}
[/has_attack]
[/filter]
[set_variable]
name = cooldown
sub = 1
[/set_variable]
[/modify_unit]
[/event]
#enddef
#define WEAPON_SPECIAL_PIERCE
[dummy]
id = pierce
name = _"pierce"
description= _ "This weapon, when used offensively, can also deal damage to a unit behind the target."
active_on = offense
[/dummy]
#enddef
#define WEAPON_SPECIAL_PIERCE_EVENTS
[event]
name = attacker_hits, attacker_misses
id = pierce_hits
first_time_only = no
[filter_attack]
special_id = pierce
[/filter_attack]
[store_unit]
[filter]
[filter_adjacent]
find_in = second_unit
adjacent = $second_unit.facing
[/filter_adjacent]
[/filter]
variable = pierce_hit_units
[/store_unit]
[foreach]
array=pierce_hit_units
variable=pierce_hit_unit
[do]
[set_variable]
name = pierce_hit_roll
rand = 1..100
[/set_variable]
[store_unit_defense]
find_in = pierce_hit_unit
variable = pierce_hit_chance
[/store_unit_defense]
[if]
[variable]
name = pierce_hit_roll
less_than_equal_to = $pierce_hit_chance
[/variable]
[then]
[harm_unit]
[filter]
find_in = pierce_hit_unit
[/filter]
amount = $weapon.damage
damage_type = $weapon.type
kill = yes
experience = yes
fire_event = yes
[/harm_unit]
[/then]
[/if]
[/do]
[/foreach]
{CLEAR_VARIABLE pierce_hit_units,pierce_hit_chance,pierce_hit_roll}
[/event]
#enddef
#define WEAPON_SPECIAL_PUNCTURE
[dummy]
id = puncture
name = _"puncture"
description= _ "This weapon, when used offensively, can also deal damage to two units behind the target."
active_on = offense
[/dummy]
#enddef
#define WEAPON_SPECIAL_PUNCTURE_EVENTS
[event]
name = attacker_hits, attacker_misses
id = puncture_hits
first_time_only = no
[filter_attack]
special_id = puncture
[/filter_attack]
[store_unit]
[filter]
[filter_adjacent]
find_in = second_unit
adjacent = $second_unit.facing
[/filter_adjacent]
[or]
[filter_location]
[filter_adjacent_location]
adjacent = $second_unit.facing
[filter_adjacent_location]
adjacent = $second_unit.facing
[filter]
find_in = second_unit
[/filter]
[/filter_adjacent_location]
[/filter_adjacent_location]
[/filter_location]
[/or]
[/filter]
variable = puncture_hit_units
[/store_unit]
[foreach]
array=puncture_hit_units
variable=puncture_hit_unit
[do]
[set_variable]
name = puncture_hit_roll
rand = 1..100
[/set_variable]
[store_unit_defense]
find_in = puncture_hit_unit
variable = puncture_hit_chance
[/store_unit_defense]
[if]
[variable]
name = puncture_hit_roll
less_than_equal_to = $puncture_hit_chance
[/variable]
[then]
[harm_unit]
[filter]
find_in = puncture_hit_unit
[/filter]
amount = $weapon.damage
damage_type = $weapon.type
kill = yes
experience = yes
fire_event = yes
[/harm_unit]
[/then]
[/if]
[/do]
[/foreach]
{CLEAR_VARIABLE puncture_hit_units,puncture_hit_chance,puncture_hit_roll}
[/event]
#enddef
#define WEAPON_SPECIAL_RAIN_OF_ARROWS
[dummy]
id = rain_of_arrows
name = _"rain of arrows"
description= _ "This weapon, when used offensively, can also deal damage to a unit behind the target and all units adjacent to the unit behind the target."
active_on = offense
[/dummy]
#enddef
#define WEAPON_SPECIAL_RAIN_OF_ARROWS_EVENTS
[event]
name = attacker_hits, attacker_misses
id = rain_of_arrows_hits
first_time_only = no
[filter_attack]
special_id = rain_of_arrows
[/filter_attack]
[store_unit]
[filter]
[filter_adjacent]
find_in = second_unit
adjacent = $second_unit.facing
[/filter_adjacent]
[or]
[filter_location]
radius = 1
[filter_adjacent_location]
adjacent = $second_unit.facing
[filter]
find_in = second_unit
[/filter]
[/filter_adjacent_location]
[/filter_location]
[/or]
[/filter]
variable = rain_of_arrows_hit_units
[/store_unit]
[foreach]
array = rain_of_arrows_hit_units
variable = rain_of_arrows_hit_unit
[do]
[set_variable]
name = rain_of_arrows_hit_roll
rand = 1..100
[/set_variable]
[store_unit_defense]
find_in = rain_of_arrows_hit_unit
variable = rain_of_arrows_hit_chance
[/store_unit_defense]
[if]
[variable]
name = rain_of_arrows_hit_roll
less_than_equal_to = $rain_of_arrows_hit_chance
[/variable]
[then]
[if]
[have_unit]
find_in = unit
[has_attack]
special_id = rain_of_arrows
[and]
special_id = poison
[/and]
[/has_attack]
[/have_unit]
[then]
[harm_unit]
[filter]
find_in = rain_of_arrows_hit_unit
[/filter]
amount = $weapon.damage
damage_type = $weapon.type
kill = yes
experience = yes
fire_event = yes
poisoned = yes
animate = yes
[primary_attack]
name = bow
[/primary_attack]
[/harm_unit]
[/then]
[else]
[harm_unit]
[filter]
find_in = rain_of_arrows_hit_unit
[/filter]
amount = $weapon.damage
damage_type = $weapon.type
kill = yes
experience = yes
fire_event = yes
animate = yes
[primary_attack]
name = bow
[/primary_attack]
[/harm_unit]
[/else]
[/if]
[/then]
[/if]
[/do]
[/foreach]
{CLEAR_VARIABLE rain_of_arrows_hit_units,rain_of_arrows_hit_chance,rain_of_arrows_hit_roll}
[/event]
#enddef
#define WEAPON_SPECIAL_SWORD_DANCE
[dummy]
id = sword_dance
name = _"sword dance"
description= _ "Every time Nym hits an enemy she gains +10% accuracy and 10% parry until the end of the combat."
[/dummy]
#enddef
#define WEAPON_SPECIAL_SWORD_DANCE_EVENTS
[event]
name = attacker_hits
first_time_only = no
[filter_attack]
special_id = sword_dance
[/filter_attack]
[object]
id = dance_buff
take_only_once = no
[filter]
find_in = unit
[/filter]
[effect]
apply_to = attack
name = sword
increase_accuracy = 10
increase_parry = 10
[/effect]
[/object]
[/event]
[event]
name = attack_end
first_time_only = no
[remove_object]
object_id = dance_buff
[/remove_object]
[/event]
#enddef
[resource]
id=utbs_ability_events
{UTBS_TAILWIND_EVENTS}
{WEAPON_SPECIAL_RAY_EVENTS}
{WEAPON_SPECIAL_PIERCE_EVENTS}
{WEAPON_SPECIAL_PUNCTURE_EVENTS}
{ABILITY_OPPORTUNIST_EVENTS}
{WEAPON_SPECIAL_NOVA_EVENTS}
{WEAPON_SPECIAL_USES_ATTACKS_EVENTS}
{WEAPON_SPECIAL_ONCE_PER_TURN_EVENTS}
{WEAPON_SPECIAL_RAIN_OF_ARROWS_EVENTS}
{WEAPON_SPECIAL_SWORD_DANCE_EVENTS}
{WEAPON_SPECIAL_COOLDOWN_EVENTS 2}
{WEAPON_SPECIAL_COOLDOWN_EVENTS 3}
{WEAPON_SPECIAL_TAUNT_EVENTS}
{SONG_VERSE_EVENTS 2}
{SONG_VERSE_EVENTS 3}
{SONG_VERSE_ILLUMINATES}

View File

@ -7,6 +7,9 @@
type=Quenoth Youth
canrecruit=yes
unrenamable=yes
[modifications]
{TRAIT_RESILIENT}
[/modifications]
#enddef
#define NYM
@ -20,7 +23,7 @@
upkeep=loyal
[modifications]
{TRAIT_LOYAL_HERO}
{TRAIT_DEXTROUS}
{TRAIT_QUICK}
[/modifications]
#enddef

View File

@ -167,3 +167,45 @@ if(red <= green and green <= blue + 3, ({NEWCHAN} / 255.0)^2 * 255.0, {ORIGCHAN}
[/foreach]
[/event]
#enddef
#define UTBS_TAUNTED_AI SIDES
# micro ai used by taunt weapon special
[event]
name = start
[micro_ai]
side = {SIDES}
ai_type = simple_attack
action = add
ca_score = 888888
[filter]
ability = taunted
[/filter]
[filter_second]
id = Kaleh
[/filter_second]
[/micro_ai]
[micro_ai]
side = {SIDES}
ai_type = goto
action = add
ca_score = 999999
[filter]
ability = taunted
[/filter]
[filter_location]
[filter]
id = Kaleh
[/filter]
[/filter_location]
ignore_enemy_at_goal = yes
ignore_units = yes
[/micro_ai]
[/event]
#enddef

View File

@ -57,6 +57,6 @@
max=0
super="$filter_unit"
{SIMPLE_KEY count s_unsigned_range_list}
{SIMPLE_KEY adjacent dir_list}
{SIMPLE_KEY adjacent s_dir_list}
{SIMPLE_KEY is_enemy s_bool}
[/tag]