Skip to content

Commit 6d6d128

Browse files
LocalIdentityLocalIdentity
andauthored
Add support for Tactician's Artillery Squad minion (#1333)
Adds support for the minion and adds support for a number of additional minion stats to SkillStatMap The `is_hidden_monster` stat on the Artillery minion and Ravenous Swarm makes them unable to be affected by any sources of nearby ally or aura mods Adds support for the stat on Shielded Transcendent spectre for chaos damage to not deal double damage to ES as there exists a player stat for it and GGG might use it in the future Co-authored-by: LocalIdentity <localidentity2@gmail.com>
1 parent 3cdfe49 commit 6d6d128

11 files changed

Lines changed: 504 additions & 353 deletions

File tree

src/Data/Minions.lua

Lines changed: 64 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ minions["AncestralSpiritTurtle"] = {
418418
modList = {
419419
-- MonsterCannotBeSlowed [action_speed_cannot_be_reduced_below_base = 1]
420420
-- MonsterCannotBeSlowed [movement_speed_cannot_be_reduced_below_base = 1]
421-
-- MonsterCannotBeStunned1 [base_cannot_be_stunned = 1]
421+
mod("StunImmune", "FLAG", 1, 0, 0), -- MonsterCannotBeStunned1 [base_cannot_be_stunned = 1]
422422
-- MonsterNoDropsOrExperience [monster_no_drops_or_experience = 1]
423423
-- set_item_drop_slots [set_item_drop_slots = 0]
424424
-- set_action_attack_or_cast_time_uses_animation_length [set_action_attack_or_cast_time_uses_animation_length = 0]
@@ -557,7 +557,7 @@ minions["UnearthBoneConstruct"] = {
557557
-- MonsterNoDropsOrExperience [monster_no_drops_or_experience = 1]
558558
-- set_item_drop_slots [set_item_drop_slots = 0]
559559
-- set_action_attack_or_cast_time_uses_animation_length [set_action_attack_or_cast_time_uses_animation_length = 0]
560-
-- set_base_heavy_stun_duration_ms [set_base_heavy_stun_duration_ms = 2930]
560+
mod("StunDuration", "OVERRIDE", 2.93, 0, 0), -- set_base_heavy_stun_duration_ms [set_base_heavy_stun_duration_ms = 2930]
561561
},
562562
}
563563

@@ -630,11 +630,11 @@ minions["ManifestWeapon"] = {
630630
-- minion_does_not_equip_quiver [minion_does_not_equip_quiver = 1]
631631
-- monster_gets_item_stats [monster_gets_item_stats = 1]
632632
-- untargetable_by_monster_ai [untargetable_by_monster_ai = 1]
633-
-- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1]
633+
mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1]
634634
-- set_cannot_be_chained_from [set_cannot_be_chained_from = 1]
635-
-- set_base_maximum_life_is_one [set_base_maximum_life_is_one = 1]
636-
-- base_cannot_be_stunned [base_cannot_be_stunned = 1]
637-
-- cannot_be_knocked_back [cannot_be_knocked_back = 1]
635+
mod("Life", "OVERRIDE", 1, 0, 0), -- set_base_maximum_life_is_one [set_base_maximum_life_is_one = 1]
636+
mod("StunImmune", "FLAG", 1, 0, 0), -- base_cannot_be_stunned [base_cannot_be_stunned = 1]
637+
mod("KnockbackImmune", "FLAG", 1, 0, 0), -- cannot_be_knocked_back [cannot_be_knocked_back = 1]
638638
-- set_cannot_be_splashed_from [set_cannot_be_splashed_from = 1]
639639
-- immune_to_auras_from_other_teams [immune_to_auras_from_other_teams = 1]
640640
-- hide_buff_visuals [hide_buff_visuals = 1]
@@ -667,21 +667,21 @@ minions["RavenousSwarm"] = {
667667
modList = {
668668
-- set_item_drop_slots [set_item_drop_slots = 0]
669669
-- set_action_attack_or_cast_time_uses_animation_length [set_action_attack_or_cast_time_uses_animation_length = 0]
670-
-- immune_to_curses [immune_to_curses = 1]
670+
mod("CurseImmune", "FLAG", 1, 0, 0), -- immune_to_curses [immune_to_curses = 1]
671671
-- immune_to_auras_from_other_entities [immune_to_auras_from_other_entities = 1]
672672
-- set_item_drop_slots [set_item_drop_slots = 0]
673673
-- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 100]
674674
-- base_maximum_mana [base_maximum_mana = 100000]
675675
-- set_monster_no_drops_or_experience [set_monster_no_drops_or_experience = 1]
676676
-- set_monster_do_not_fracture [set_monster_do_not_fracture = 1]
677-
-- set_max_frenzy_charges [set_max_frenzy_charges = 0]
678-
-- set_max_endurance_charges [set_max_endurance_charges = 0]
679-
-- set_max_power_charges [set_max_power_charges = 0]
680-
-- is_hidden_monster [is_hidden_monster = 1]
677+
mod("FrenzyChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_frenzy_charges [set_max_frenzy_charges = 0]
678+
mod("EnduranceChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_endurance_charges [set_max_endurance_charges = 0]
679+
mod("PowerChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_power_charges [set_max_power_charges = 0]
680+
mod("HiddenMonster", "FLAG", 1, 0, 0), -- is_hidden_monster [is_hidden_monster = 1]
681681
mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1]
682-
-- base_cannot_be_stunned [base_cannot_be_stunned = 1]
683-
-- cannot_be_knocked_back [cannot_be_knocked_back = 1]
684-
-- base_cannot_be_frozen [base_cannot_be_frozen = 1]
682+
mod("StunImmune", "FLAG", 1, 0, 0), -- base_cannot_be_stunned [base_cannot_be_stunned = 1]
683+
mod("KnockbackImmune", "FLAG", 1, 0, 0), -- cannot_be_knocked_back [cannot_be_knocked_back = 1]
684+
mod("FreezeImmune", "FLAG", 1, 0, 0), -- base_cannot_be_frozen [base_cannot_be_frozen = 1]
685685
mod("Life", "OVERRIDE", 1, 0, 0), -- base_maximum_life_is_one [base_maximum_life_is_one = 1]
686686
},
687687
}
@@ -713,24 +713,66 @@ minions["LivingLightning"] = {
713713
-- MonsterNoDropsOrExperience [monster_no_drops_or_experience = 1]
714714
-- set_item_drop_slots [set_item_drop_slots = 0]
715715
-- set_action_attack_or_cast_time_uses_animation_length [set_action_attack_or_cast_time_uses_animation_length = 0]
716-
-- immune_to_curses [immune_to_curses = 1]
716+
mod("CurseImmune", "FLAG", 1, 0, 0), -- immune_to_curses [immune_to_curses = 1]
717717
-- immune_to_auras_from_other_teams [immune_to_auras_from_other_teams = 1]
718718
-- set_item_drop_slots [set_item_drop_slots = 0]
719719
-- set_monster_no_drops_or_experience [set_monster_no_drops_or_experience = 1]
720720
-- set_monster_do_not_fracture [set_monster_do_not_fracture = 1]
721-
-- set_max_frenzy_charges [set_max_frenzy_charges = 0]
722-
-- set_max_endurance_charges [set_max_endurance_charges = 0]
723-
-- set_max_power_charges [set_max_power_charges = 0]
724-
-- base_cannot_be_stunned [base_cannot_be_stunned = 1]
725-
-- cannot_be_knocked_back [cannot_be_knocked_back = 1]
721+
mod("FrenzyChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_frenzy_charges [set_max_frenzy_charges = 0]
722+
mod("EnduranceChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_endurance_charges [set_max_endurance_charges = 0]
723+
mod("PowerChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_power_charges [set_max_power_charges = 0]
724+
mod("StunImmune", "FLAG", 1, 0, 0), -- base_cannot_be_stunned [base_cannot_be_stunned = 1]
725+
mod("KnockbackImmune", "FLAG", 1, 0, 0), -- cannot_be_knocked_back [cannot_be_knocked_back = 1]
726726
-- set_phase_through_objects [set_phase_through_objects = 1]
727727
-- untargetable_by_monster_ai [untargetable_by_monster_ai = 1]
728728
-- set_minion_cannot_be_directed [set_minion_cannot_be_directed = 1]
729-
-- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1]
729+
mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1]
730730
-- set_cannot_be_chained_from [set_cannot_be_chained_from = 1]
731-
-- set_base_maximum_life_is_one [set_base_maximum_life_is_one = 1]
731+
mod("Life", "OVERRIDE", 1, 0, 0), -- set_base_maximum_life_is_one [set_base_maximum_life_is_one = 1]
732732
-- set_cannot_be_splashed_from [set_cannot_be_splashed_from = 1]
733733
-- hide_buff_visuals [hide_buff_visuals = 1]
734734
-- hide_mini_life_bar [hide_mini_life_bar = 1]
735735
},
736736
}
737+
738+
minions["TacticianMinion"] = {
739+
name = "Artillery Squad",
740+
monsterTags = { "ranged", "Unarmed_onhit_audio", "very_slow_movement", },
741+
life = 1,
742+
baseDamageIgnoresAttackSpeed = true,
743+
fireResist = 0,
744+
coldResist = 0,
745+
lightningResist = 0,
746+
chaosResist = 0,
747+
damage = 0.67,
748+
damageSpread = 0.2,
749+
attackTime = 1,
750+
attackRange = 6,
751+
accuracy = 1,
752+
baseMovementSpeed = 8,
753+
spectreReservation = 50,
754+
companionReservation = 30,
755+
spawnLocation = {
756+
},
757+
skillList = {
758+
"DeathFromAboveDaemonMinion",
759+
},
760+
modList = {
761+
mod("CurseImmune", "FLAG", 1, 0, 0), -- immune_to_curses [immune_to_curses = 1]
762+
-- immune_to_auras_from_other_entities [immune_to_auras_from_other_entities = 1]
763+
-- set_item_drop_slots [set_item_drop_slots = 0]
764+
-- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 100]
765+
-- base_maximum_mana [base_maximum_mana = 100000]
766+
-- set_monster_no_drops_or_experience [set_monster_no_drops_or_experience = 1]
767+
-- set_monster_do_not_fracture [set_monster_do_not_fracture = 1]
768+
mod("FrenzyChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_frenzy_charges [set_max_frenzy_charges = 0]
769+
mod("EnduranceChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_endurance_charges [set_max_endurance_charges = 0]
770+
mod("PowerChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_power_charges [set_max_power_charges = 0]
771+
mod("HiddenMonster", "FLAG", 1, 0, 0), -- is_hidden_monster [is_hidden_monster = 1]
772+
mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1]
773+
mod("StunImmune", "FLAG", 1, 0, 0), -- base_cannot_be_stunned [base_cannot_be_stunned = 1]
774+
mod("KnockbackImmune", "FLAG", 1, 0, 0), -- cannot_be_knocked_back [cannot_be_knocked_back = 1]
775+
-- is_daemon [is_daemon = 1]
776+
-- set_skill_can_be_active_blocked_from_all_directions [set_skill_can_be_active_blocked_from_all_directions = 1]
777+
},
778+
}

src/Data/SkillStatMap.lua

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2564,9 +2564,53 @@ return {
25642564
mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", nil) }),
25652565
value = -100,
25662566
},
2567+
["base_cannot_be_stunned"] = {
2568+
flag("StunImmune"),
2569+
},
2570+
["cannot_be_knocked_back"] = {
2571+
flag("KnockbackImmune"),
2572+
},
2573+
["immune_to_curses"] = {
2574+
flag("CurseImmune"),
2575+
},
2576+
["base_cannot_be_frozen"] = {
2577+
flag("FreezeImmune"),
2578+
},
2579+
["base_chaos_damage_does_not_damage_energy_shield_extra_hard"] = {
2580+
flag("ChaosNotDoubleESDamage"),
2581+
},
2582+
["cannot_recharge_energy_shield"] = {
2583+
flag("NoEnergyShieldRecharge"),
2584+
},
2585+
["is_hidden_monster"] = {
2586+
flag("HiddenMonster"),
2587+
},
2588+
["set_base_maximum_life_is_one"] = {
2589+
mod("Life", "OVERRIDE", nil),
2590+
},
25672591
["base_maximum_life_is_one"] = {
25682592
mod("Life", "OVERRIDE", nil),
25692593
},
2594+
["set_max_frenzy_charges"] = {
2595+
mod("FrenzyChargesMax", "OVERRIDE", nil),
2596+
},
2597+
["set_max_endurance_charges"] = {
2598+
mod("EnduranceChargesMax", "OVERRIDE", nil),
2599+
},
2600+
["set_max_power_charges"] = {
2601+
mod("PowerChargesMax", "OVERRIDE", nil),
2602+
},
2603+
["set_base_heavy_stun_duration_ms"] = {
2604+
mod("StunDuration", "OVERRIDE", nil),
2605+
div = 1000,
2606+
},
2607+
["stun_duration_on_self_+%"] = {
2608+
mod("StunDuration", "INC", nil),
2609+
},
2610+
["set_base_cannot_be_damaged"] = {
2611+
mod("DamageTaken", "MORE", nil),
2612+
value = -100,
2613+
},
25702614
--
25712615
-- Gem Levels / quality
25722616
--

src/Data/Skills/minion.lua

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,4 +1188,54 @@ skills["LivingLightningZap"] = {
11881188
},
11891189
},
11901190
}
1191+
}
1192+
skills["DeathFromAboveDaemonMinion"] = {
1193+
name = "Death From Above",
1194+
hidden = true,
1195+
description = "Fires a flare at a target location, attaching to an enemy if it lands on one. Then fires a series of arrow volleys centred around the flare.",
1196+
skillTypes = { [SkillType.Attack] = true, [SkillType.RangedAttack] = true, [SkillType.Rain] = true, [SkillType.Area] = true, [SkillType.Projectile] = true, [SkillType.ProjectilesNumberModifiersNotApplied] = true, },
1197+
castTime = 1,
1198+
qualityStats = {
1199+
},
1200+
levels = {
1201+
[1] = { baseMultiplier = 11.4, storedUses = 1, levelRequirement = 0, cooldown = 40, },
1202+
},
1203+
statSets = {
1204+
[1] = {
1205+
label = "Death From Above",
1206+
incrementalEffectiveness = 0.054999999701977,
1207+
statDescriptionScope = "death_from_above",
1208+
statMap = {
1209+
["death_from_above_number_of_volleys"] = {
1210+
skill("dpsMultiplier", nil),
1211+
},
1212+
},
1213+
baseFlags = {
1214+
attack = true,
1215+
projectile = true,
1216+
area = true,
1217+
},
1218+
constantStats = {
1219+
{ "death_from_above_volley_delay_ms", 2000 },
1220+
{ "death_from_above_number_of_volleys", 4 },
1221+
{ "explosion_delay_ms", 250 },
1222+
{ "active_skill_base_area_of_effect_radius", 140 },
1223+
{ "active_skill_base_secondary_area_of_effect_radius", 75 },
1224+
{ "command_minion_marker_additional_time_ms", 300 },
1225+
},
1226+
stats = {
1227+
"is_commandable_skill",
1228+
"base_is_projectile",
1229+
"is_area_damage",
1230+
"skill_cannot_be_frozen",
1231+
"skill_cannot_be_electrocuted",
1232+
"skill_cannot_be_knocked_back",
1233+
"skill_cannot_be_stunned",
1234+
"modifiers_to_projectile_count_do_not_apply",
1235+
},
1236+
levels = {
1237+
[1] = { actorLevel = 1, },
1238+
},
1239+
},
1240+
}
11911241
}

src/Data/Skills/other.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5623,6 +5623,7 @@ skills["SupportingFirePlayer"] = {
56235623
baseTypeName = "Supporting Fire",
56245624
fromTree = true,
56255625
minionList = {
5626+
"TacticianMinion",
56265627
},
56275628
color = 4,
56285629
description = "Recruit artillery Minions that takes up positions behind you. They will lay in wait for your Command then fire volleys of arrows at the target location.",

0 commit comments

Comments
 (0)