diff --git a/src/Data/Minions.lua b/src/Data/Minions.lua index ff19789fda..2e6235f406 100644 --- a/src/Data/Minions.lua +++ b/src/Data/Minions.lua @@ -28,6 +28,7 @@ minions["RaisedZombie"] = { modList = { mod("Armour", "INC", 40, 0, 0), -- MonsterImplicitDamageReduction1 [physical_damage_reduction_rating_+% = 40] mod("StunThreshold", "INC", 30, 0, 0), -- RaiseZombieStunThreshold [stun_threshold_+% = 30] + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -224,6 +225,8 @@ minions["SummonedRagingSpirit"] = { -- CannotBeAugmented [cannot_be_tagged_by_sentinel = 1] -- CannotBeAugmented [cannot_be_afflicted = 1] -- CannotBeAugmented [cannot_have_affliction_mods = 1] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] }, } @@ -246,6 +249,12 @@ minions["SummonedEssenceSpirit"] = { }, modList = { mod("Speed", "MORE", 40, 1, 0), -- MonsterSummonedSkullFastAttack1 [active_skill_attack_speed_+%_final = 40] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1] + -- set_cannot_be_chained_from [set_cannot_be_chained_from = 1] + -- set_projectiles_always_pierce_you [set_projectiles_always_pierce_you = 1] mod("Condition:FullLife", "FLAG", true), }, } @@ -297,6 +306,7 @@ minions["RaisedSkeleton"] = { mod("BlockChance", "BASE", 30, 0, 0), -- MonsterAttackBlock30Bypass15 [monster_base_block_% = 30] mod("BlockEffect", "BASE", 15, 0, 0), -- MonsterAttackBlock30Bypass15 [base_block_%_damage_taken = 15] -- SummonSkeletonsSkeletonIsWarrior [summoned_skeleton_is_warrior = 1] + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -322,6 +332,7 @@ minions["RaisedSkeletonCaster"] = { }, modList = { -- SummonSkeletonsSkeletonIsMage [summoned_skeleton_is_mage = 1] + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -349,6 +360,7 @@ minions["RaisedSkeletonMeleeVaal"] = { mod("BlockChance", "BASE", 30, 0, 0), -- MonsterAttackBlock30Bypass15 [monster_base_block_% = 30] mod("BlockEffect", "BASE", 15, 0, 0), -- MonsterAttackBlock30Bypass15 [base_block_%_damage_taken = 15] -- SummonSkeletonsSkeletonIsWarrior [summoned_skeleton_is_warrior = 1] + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -372,6 +384,7 @@ minions["RaisedSkeletonArcherVaal"] = { "Melee", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -395,6 +408,7 @@ minions["RaisedSkeletonArcher"] = { "Melee", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -416,6 +430,11 @@ minions["Clone"] = { }, modList = { mod("EnergyShield", "BASE", 10, 0, 0), -- MirrorArrowEnergyShield [base_maximum_energy_shield = 10] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- set_is_double [set_is_double = 1] + -- set_suppress_mod_stat_display [set_suppress_mod_stat_display = 1] + mod("EnergyShieldRecharge", "OVERRIDE", 0, 0, 0), -- set_energy_shield_recharge_rate_per_minute_% [set_energy_shield_recharge_rate_per_minute_% = 0] + mod("DamageTaken", "MORE", -80, 0, 0), -- monster_inherent_damage_taken_+%_final [monster_inherent_damage_taken_+%_final = -80] }, } @@ -437,6 +456,11 @@ minions["ArrowClone"] = { }, modList = { mod("EnergyShield", "BASE", 10, 0, 0), -- MirrorArrowEnergyShield [base_maximum_energy_shield = 10] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- set_is_double [set_is_double = 1] + -- set_suppress_mod_stat_display [set_suppress_mod_stat_display = 1] + mod("EnergyShieldRecharge", "OVERRIDE", 0, 0, 0), -- set_energy_shield_recharge_rate_per_minute_% [set_energy_shield_recharge_rate_per_minute_% = 0] + mod("DamageTaken", "MORE", -80, 0, 0), -- monster_inherent_damage_taken_+%_final [monster_inherent_damage_taken_+%_final = -80] }, } @@ -458,6 +482,11 @@ minions["ArrowCloneRoA"] = { }, modList = { mod("EnergyShield", "BASE", 10, 0, 0), -- MirrorArrowEnergyShield [base_maximum_energy_shield = 10] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- set_is_double [set_is_double = 1] + -- set_suppress_mod_stat_display [set_suppress_mod_stat_display = 1] + mod("EnergyShieldRecharge", "OVERRIDE", 0, 0, 0), -- set_energy_shield_recharge_rate_per_minute_% [set_energy_shield_recharge_rate_per_minute_% = 0] + mod("DamageTaken", "MORE", -80, 0, 0), -- monster_inherent_damage_taken_+%_final [monster_inherent_damage_taken_+%_final = -80] }, } @@ -479,6 +508,11 @@ minions["ArrowCloneEle"] = { }, modList = { mod("EnergyShield", "BASE", 10, 0, 0), -- MirrorArrowEnergyShield [base_maximum_energy_shield = 10] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- set_is_double [set_is_double = 1] + -- set_suppress_mod_stat_display [set_suppress_mod_stat_display = 1] + mod("EnergyShieldRecharge", "OVERRIDE", 0, 0, 0), -- set_energy_shield_recharge_rate_per_minute_% [set_energy_shield_recharge_rate_per_minute_% = 0] + mod("DamageTaken", "MORE", -80, 0, 0), -- monster_inherent_damage_taken_+%_final [monster_inherent_damage_taken_+%_final = -80] }, } @@ -503,6 +537,12 @@ minions["SpiderMinion"] = { modList = { -- SummonedSpiderPhasing [phase_through_objects = 1] -- SummonedSpiderPhasing [suppress_phasing_visual = 1] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- set_is_spider [set_is_spider = 1] + mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1] + -- set_cannot_be_chained_from [set_cannot_be_chained_from = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] }, } @@ -525,6 +565,9 @@ minions["AnimatedWeapon"] = { }, modList = { -- EmergeSpeedLow [emerge_speed_+% = 100] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- minion_does_not_equip_quiver [minion_does_not_equip_quiver = 1] + -- monster_gets_item_stats [monster_gets_item_stats = 1] }, } @@ -548,8 +591,12 @@ minions["AnimatedArmour"] = { }, modList = { -- LabyrinthArrowTrapDamageTakenAnimateArmour [damage_taken_+%_from_arrow_traps_final = -90] - mod("Speed", "MORE", 10, ModFlag.Attack, 0, { type = "Condition", var = "DualWielding" }), - mod("BlockChance", "BASE", 15, 0, 0, { type = "Condition", var = "DualWielding" }), + mod("Speed", "MORE", 10, 1, 0, { type = "Condition", var = "DualWielding" }), -- dual_wield_inherent_attack_speed_+%_final [dual_wield_inherent_attack_speed_+%_final = 10] + mod("BlockChance", "BASE", 15, 0, 0, { type = "Condition", var = "DualWielding" }), -- block_while_dual_wielding_% [block_while_dual_wielding_% = 15] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- monster_gets_item_stats [monster_gets_item_stats = 1] + mod("PhysicalMin", "BASE", 2, 8192, 65536), -- main_hand_local_minimum_added_physical_damage [main_hand_local_minimum_added_physical_damage = 2] + mod("PhysicalMax", "BASE", 6, 8192, 65536), -- main_hand_local_maximum_added_physical_damage [main_hand_local_maximum_added_physical_damage = 6] }, } @@ -573,6 +620,8 @@ minions["IcyRagingSpirit"] = { mod("PhysicalDamageConvertToCold", "BASE", 50, 0, 0), -- MonsterSummonedElementalCold [base_physical_damage_%_to_convert_to_cold = 50] -- MonsterCannotBeChainedFrom_ [cannot_be_chained_from = 1] mod("Speed", "MORE", 40, 1, 0), -- MonsterSummonedSkullFastAttack1 [active_skill_attack_speed_+%_final = 40] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] }, } @@ -595,6 +644,10 @@ minions["UniqueAnimatedWeapon"] = { "DancingDervishCycloneChannelled", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + -- minion_does_not_equip_quiver [minion_does_not_equip_quiver = 1] + mod("DamageTaken", "MORE", -95, 0, 0), -- monster_inherent_damage_taken_+%_final [monster_inherent_damage_taken_+%_final = -95] + -- monster_gets_item_stats [monster_gets_item_stats = 1] mod("Life", "MORE", 698), -- MonsterUnique2, mod("Damage", "MORE", 70), -- MonsterUnique5, mod("Speed", "MORE", 33, ModFlag.Attack), -- MonsterUnique8, @@ -624,6 +677,8 @@ minions["SummonedPhantasm"] = { "SummonPhantasmFadingProjectile2", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + -- set_cannot_spawn_support_ghosts [set_cannot_spawn_support_ghosts = 1] }, } @@ -650,6 +705,12 @@ minions["HeraldOfAgonySpiderPlated"] = { modList = { mod("PhysicalDamageConvertToChaos", "BASE", 40, 0, 0), -- MonsterConvertToChaosHeraldOfAgony1 [base_physical_damage_%_to_convert_to_chaos = 40] mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- MonsterCannotBeDamaged [base_cannot_be_damaged = 1] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- set_cannot_die [set_cannot_die = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] mod("Condition:FullLife", "FLAG", true), }, } @@ -677,6 +738,7 @@ minions["AxisEliteSoldierHeraldOfLight"] = { "SentinelHolySlam", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -701,6 +763,11 @@ minions["HolyLivingRelic"] = { }, modList = { -- EmergeSpeedHigh [emerge_speed_+% = 0] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- minion_targeting_use_parent_location [minion_targeting_use_parent_location = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- set_cannot_be_afflicted [set_cannot_be_afflicted = 1] }, } @@ -730,6 +797,7 @@ minions["AxisEliteSoldierDominatingBlow"] = { -- MonsterCastsShieldChargeText [monster_casts_shield_charge_text = 1] mod("BlockChance", "BASE", 40, 0, 0), -- MonsterAttackBlock40Bypass20 [monster_base_block_% = 40] mod("BlockEffect", "BASE", 20, 0, 0), -- MonsterAttackBlock40Bypass20 [base_block_%_damage_taken = 20] + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -757,6 +825,7 @@ minions["AxisEliteSoldierDominatingBlowVaal"] = { "VaalDominationMelee", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] mod("Damage", "MORE", 200), mod("DamageTaken", "MORE", -70), }, @@ -784,6 +853,7 @@ minions["AbsolutionTemplarJudge"] = { "AbsolutionMinionEmpowered", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -810,6 +880,7 @@ minions["AbsolutionTemplarJudgeVaal"] = { "GSVaalAbsolutionEmerge", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] mod("Damage", "MORE", 200), mod("DamageTaken", "MORE", -70), }, @@ -837,6 +908,10 @@ minions["RhoaUniqueSummoned"] = { modList = { -- MonsterNearbyEnemiesAreIntimidated [is_intimidated = 1] -- MonsterNearbyEnemiesAreIntimidated [local_display_nearby_enemies_are_intimidated = 1] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1] + -- set_cannot_be_chained_from [set_cannot_be_chained_from = 1] }, } @@ -861,6 +936,10 @@ minions["SnakeSpitUniqueSummoned"] = { }, modList = { mod("PhysicalDamageConvertToChaos", "BASE", 30, 0, 0), -- MonsterSnakeChaos [base_physical_damage_%_to_convert_to_chaos = 30] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1] + -- set_cannot_be_chained_from [set_cannot_be_chained_from = 1] }, } @@ -887,6 +966,10 @@ minions["DropBearUniqueSummoned"] = { "DropBearSummonedRallyingCry", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1] + -- set_cannot_be_chained_from [set_cannot_be_chained_from = 1] }, } @@ -949,6 +1032,19 @@ minions["SkitterbotCold"] = { -- CannotBeAugmented [cannot_be_tagged_by_sentinel = 1] -- CannotBeAugmented [cannot_be_afflicted = 1] -- CannotBeAugmented [cannot_have_affliction_mods = 1] + -- set_immune_to_cheats [set_immune_to_cheats = 1] + -- set_cannot_die [set_cannot_die = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1] + -- set_cannot_taunt_enemies [set_cannot_taunt_enemies = 1] + -- set_untargetable_by_monster_ai [set_untargetable_by_monster_ai = 1] + mod("StunImmune", "FLAG", 1, 0, 0), -- base_cannot_be_stunned [base_cannot_be_stunned = 1] + mod("KnockbackImmune", "FLAG", 1, 0, 0), -- cannot_be_knocked_back [cannot_be_knocked_back = 1] + mod("EnduranceChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_endurance_charges [set_max_endurance_charges = 0] + mod("FrenzyChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_frenzy_charges [set_max_frenzy_charges = 0] + mod("PowerChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_power_charges [set_max_power_charges = 0] + -- set_cannot_be_chained_from [set_cannot_be_chained_from = 1] + -- set_cannot_be_splashed_from [set_cannot_be_splashed_from = 1] }, } @@ -977,6 +1073,19 @@ minions["SkitterbotLightning"] = { -- CannotBeAugmented [cannot_be_tagged_by_sentinel = 1] -- CannotBeAugmented [cannot_be_afflicted = 1] -- CannotBeAugmented [cannot_have_affliction_mods = 1] + -- set_immune_to_cheats [set_immune_to_cheats = 1] + -- set_cannot_die [set_cannot_die = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1] + -- set_cannot_taunt_enemies [set_cannot_taunt_enemies = 1] + -- set_untargetable_by_monster_ai [set_untargetable_by_monster_ai = 1] + mod("StunImmune", "FLAG", 1, 0, 0), -- base_cannot_be_stunned [base_cannot_be_stunned = 1] + mod("KnockbackImmune", "FLAG", 1, 0, 0), -- cannot_be_knocked_back [cannot_be_knocked_back = 1] + mod("EnduranceChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_endurance_charges [set_max_endurance_charges = 0] + mod("FrenzyChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_frenzy_charges [set_max_frenzy_charges = 0] + mod("PowerChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_power_charges [set_max_power_charges = 0] + -- set_cannot_be_chained_from [set_cannot_be_chained_from = 1] + -- set_cannot_be_splashed_from [set_cannot_be_splashed_from = 1] }, } @@ -1005,6 +1114,19 @@ minions["SkitterbotFire"] = { -- CannotBeAugmented [cannot_be_tagged_by_sentinel = 1] -- CannotBeAugmented [cannot_be_afflicted = 1] -- CannotBeAugmented [cannot_have_affliction_mods = 1] + -- set_immune_to_cheats [set_immune_to_cheats = 1] + -- set_cannot_die [set_cannot_die = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1] + -- set_cannot_taunt_enemies [set_cannot_taunt_enemies = 1] + -- set_untargetable_by_monster_ai [set_untargetable_by_monster_ai = 1] + mod("StunImmune", "FLAG", 1, 0, 0), -- base_cannot_be_stunned [base_cannot_be_stunned = 1] + mod("KnockbackImmune", "FLAG", 1, 0, 0), -- cannot_be_knocked_back [cannot_be_knocked_back = 1] + mod("EnduranceChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_endurance_charges [set_max_endurance_charges = 0] + mod("FrenzyChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_frenzy_charges [set_max_frenzy_charges = 0] + mod("PowerChargesMax", "OVERRIDE", 0, 0, 0), -- set_max_power_charges [set_max_power_charges = 0] + -- set_cannot_be_chained_from [set_cannot_be_chained_from = 1] + -- set_cannot_be_splashed_from [set_cannot_be_splashed_from = 1] }, } @@ -1049,6 +1171,7 @@ minions["SummonedReaper"] = { -- CannotBeAugmented [cannot_be_tagged_by_sentinel = 1] -- CannotBeAugmented [cannot_be_afflicted = 1] -- CannotBeAugmented [cannot_have_affliction_mods = 1] + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -1073,6 +1196,12 @@ minions["SummonedArbalists"] = { }, modList = { mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- MonsterCannotBeDamaged [base_cannot_be_damaged = 1] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- set_cannot_die [set_cannot_die = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1095,6 +1224,7 @@ minions["GuardianSentinel"] = { "VaalDominationMelee", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] }, } @@ -1143,6 +1273,11 @@ minions["GuardianRelicFire"] = { }, modList = { -- EmergeSpeedHigh [emerge_speed_+% = 0] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- minion_targeting_use_parent_location [minion_targeting_use_parent_location = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- set_cannot_be_afflicted [set_cannot_be_afflicted = 1] }, } @@ -1166,6 +1301,11 @@ minions["GuardianRelicCold"] = { }, modList = { -- EmergeSpeedHigh [emerge_speed_+% = 0] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- minion_targeting_use_parent_location [minion_targeting_use_parent_location = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- set_cannot_be_afflicted [set_cannot_be_afflicted = 1] }, } @@ -1189,6 +1329,11 @@ minions["GuardianRelicLightning"] = { }, modList = { -- EmergeSpeedHigh [emerge_speed_+% = 0] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- minion_targeting_use_parent_location [minion_targeting_use_parent_location = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- set_cannot_be_afflicted [set_cannot_be_afflicted = 1] }, } @@ -1243,6 +1388,12 @@ minions["AncestralAhuanaMinion"] = { "MPWAhuanaFakeArrow", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1269,6 +1420,12 @@ minions["AncestralAkoyaMinion"] = { "GSAkoyaRockExplosion", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1293,6 +1450,12 @@ minions["AncestralIkiahoMinion"] = { "EASIkiahoIceStorm", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1319,6 +1482,12 @@ minions["AncestralKahuturoaMinion"] = { "GAKahuturoaLeapSlamWeaponSwing", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1347,6 +1516,12 @@ minions["AncestralKaomMinion"] = { "AncestralKaomUnarmedCombo", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1372,6 +1547,12 @@ minions["AncestralKiloavaMinion"] = { "GSKiloavaLightningBolt", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1400,6 +1581,12 @@ minions["AncestralMaataMinion"] = { "GTMaataVineCascade", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1428,6 +1615,12 @@ minions["AncestralRakiataMinion"] = { "GTRakiataSlam", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1452,6 +1645,12 @@ minions["AncestralTawhanukuMinion"] = { "GTTawhanukuMultiSoulrend", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1479,6 +1678,12 @@ minions["AncestralUtulaMinion"] = { "MPSUtulaFireball", }, modList = { + -- set_item_drop_slots [set_item_drop_slots = 0] + mod("Condition:CannotBeDamaged", "FLAG", 1, 0, 0), -- base_cannot_be_damaged [base_cannot_be_damaged = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + -- cannot_taunt_enemies [cannot_taunt_enemies = 1] + -- minion_aggro_range_scaled_by_distance_to_parent_target [minion_aggro_range_scaled_by_distance_to_parent_target = 1] }, } @@ -1508,5 +1713,12 @@ minions["LivingLightningMinion"] = { -- CannotBeAugmented [cannot_be_tagged_by_sentinel = 1] -- CannotBeAugmented [cannot_be_afflicted = 1] -- CannotBeAugmented [cannot_have_affliction_mods = 1] + -- set_item_drop_slots [set_item_drop_slots = 0] + -- set_cannot_spawn_support_ghosts [set_cannot_spawn_support_ghosts = 1] + -- untargetable_by_monster_ai [untargetable_by_monster_ai = 1] + mod("DamageTaken", "MORE", -100, 0, 0), -- set_base_cannot_be_damaged [set_base_cannot_be_damaged = 1] + -- set_cannot_be_chained_from [set_cannot_be_chained_from = 1] + mod("Life", "OVERRIDE", 1, 0, 0), -- set_maximum_life_is_one [set_maximum_life_is_one = 1] + mod("AvoidProjectilesChance", "BASE", 100, 0, 0), -- set_base_avoid_projectiles_%_chance [set_base_avoid_projectiles_%_chance = 100] }, } diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index 165ab21fc6..4121104848 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -405,6 +405,9 @@ return { ["base_spell_block_%"] = { mod("SpellBlockChance", "BASE", nil), }, +["block_while_dual_wielding_%"] = { + mod("BlockChance", "BASE", nil, 0, 0, { type = "Condition", var = "DualWielding" }), +}, ["base_block_%_damage_taken"] = { mod("BlockEffect", "BASE", nil) }, @@ -1505,6 +1508,9 @@ return { ["active_skill_attack_speed_+%_final"] = { mod("Speed", "MORE", nil, ModFlag.Attack), }, +["dual_wield_inherent_attack_speed_+%_final"] = { + mod("Speed", "MORE", nil, ModFlag.Attack, 0, { type = "Condition", var = "DualWielding" }), +}, ["base_attack_speed_+%_per_frenzy_charge"] = { mod("Speed", "INC", nil, ModFlag.Attack, 0, { type = "Multiplier", var = "FrenzyCharge" }), }, @@ -1541,6 +1547,12 @@ return { ["attack_maximum_added_physical_damage_with_weapons"] = { mod("PhysicalMax", "BASE", nil, ModFlag.Weapon, KeywordFlag.Attack), }, +["main_hand_local_minimum_added_physical_damage"] = { + mod("PhysicalMin", "BASE", nil, ModFlag.Weapon, KeywordFlag.Attack), +}, +["main_hand_local_maximum_added_physical_damage"] = { + mod("PhysicalMax", "BASE", nil, ModFlag.Weapon, KeywordFlag.Attack), +}, ["attack_minimum_added_lightning_damage"] = { mod("LightningMin", "BASE", nil, 0, KeywordFlag.Attack), }, @@ -2113,6 +2125,41 @@ return { ["base_cannot_be_damaged"] = { mod("Condition:CannotBeDamaged", "FLAG", nil) }, +["base_cannot_be_stunned"] = { + flag("StunImmune"), +}, +["cannot_be_knocked_back"] = { + flag("KnockbackImmune"), +}, +["set_immune_to_curses"] = { + flag("CurseImmune"), +}, +["set_maximum_life_is_one"] = { + mod("Life", "OVERRIDE", nil), +}, +["set_max_frenzy_charges"] = { + mod("FrenzyChargesMax", "OVERRIDE", nil), +}, +["set_energy_shield_recharge_rate_per_minute_%"] = { + mod("EnergyShieldRecharge", "OVERRIDE", nil), + div = 60 * 100 +}, +["set_max_endurance_charges"] = { + mod("EnduranceChargesMax", "OVERRIDE", nil), +}, +["set_max_power_charges"] = { + mod("PowerChargesMax", "OVERRIDE", nil), +}, +["set_base_avoid_projectiles_%_chance"] = { + mod("AvoidProjectilesChance", "BASE", nil), +}, +["monster_inherent_damage_taken_+%_final"] = { + mod("DamageTaken", "MORE", nil), +}, +["set_base_cannot_be_damaged"] = { + mod("DamageTaken", "MORE", nil), + value = -100, +}, -- -- Gem Levels -- diff --git a/src/Data/Spectres.lua b/src/Data/Spectres.lua index 0780faffd4..b4cef1077d 100644 --- a/src/Data/Spectres.lua +++ b/src/Data/Spectres.lua @@ -144,6 +144,7 @@ minions["Metadata/Monsters/Axis/AxisExperimenter"] = { "ExperimenterEnrageDemon", }, modList = { + -- muzzle_flash_swap_hands [muzzle_flash_swap_hands = 1] }, } minions["Metadata/Monsters/Axis/AxisExperimenter2"] = { @@ -169,6 +170,7 @@ minions["Metadata/Monsters/Axis/AxisExperimenter2"] = { "MonsterDetonateDeadExperimenter", }, modList = { + -- muzzle_flash_swap_hands [muzzle_flash_swap_hands = 1] }, } minions["Metadata/Monsters/Axis/AxisExperimenterRaiseZombie"] = { @@ -194,6 +196,7 @@ minions["Metadata/Monsters/Axis/AxisExperimenterRaiseZombie"] = { "ExperimenterEnrageDemon", }, modList = { + -- muzzle_flash_swap_hands [muzzle_flash_swap_hands = 1] }, } -- Bandit @@ -269,6 +272,7 @@ minions["Metadata/Monsters/Bandits/BanditMeleeWarlordsMarkMaul"] = { "EASBanditTaunt", }, modList = { + -- set_use_melee_pattern_range [set_use_melee_pattern_range = 0] }, } minions["Metadata/Monsters/Bandit/DockworkerChampion_"] = { @@ -291,6 +295,7 @@ minions["Metadata/Monsters/Bandit/DockworkerChampion_"] = { "GroundEffectsSlamDockworkerChampion", }, modList = { + -- set_use_melee_pattern_range [set_use_melee_pattern_range = 0] }, } minions["Metadata/Monsters/Bandits/BanditBowChampion"] = { @@ -340,6 +345,7 @@ minions["Metadata/Monsters/Bandits/BanditRangedTornadoShotPetrified"] = { "SkeletonSoldierTornadoShot", }, modList = { + -- set_immune_to_cheats [set_immune_to_cheats = 1] }, } -- Beast @@ -813,6 +819,7 @@ minions["Metadata/Monsters/DemonModular/DemonModularBladeVortex"] = { "DemonModularBladeVortexSpectre", }, modList = { + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 0] }, } minions["Metadata/Monsters/DemonModular/DemonModularFire"] = { @@ -836,6 +843,7 @@ minions["Metadata/Monsters/DemonModular/DemonModularFire"] = { "ModularDemonFireSuicideExplosion", }, modList = { + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 0] }, } -- Maw @@ -959,6 +967,7 @@ minions["Metadata/Monsters/GhostPirates/GhostPirateBlackBowMaps"] = { }, modList = { mod("PhysicalDamageGainAsLightning", "BASE", 100, 0, 0), -- MonsterPhysicalAddedAsLightningSkeletonMaps [physical_damage_%_to_add_as_lightning = 100] + -- supress_muzzle_flash [supress_muzzle_flash = 1] }, } minions["Metadata/Monsters/GhostPirates/GhostPirateBlackFlickerStrikeMaps"] = { @@ -989,6 +998,7 @@ minions["Metadata/Monsters/GhostPirates/GhostPirateBlackFlickerStrikeMaps"] = { mod("BlockChance", "BASE", 20, 0, 0), -- MonsterAttackSpellBlock20Bypass40 [monster_base_block_% = 20] mod("SpellBlockChance", "BASE", 20, 0, 0), -- MonsterAttackSpellBlock20Bypass40 [base_spell_block_% = 20] mod("BlockEffect", "BASE", 40, 0, 0), -- MonsterAttackSpellBlock20Bypass40 [base_block_%_damage_taken = 40] + -- set_use_melee_pattern_range [set_use_melee_pattern_range = 0] }, } minions["Metadata/Monsters/GhostPirates/GhostPirateGreenBladeVortex"] = { @@ -1019,6 +1029,7 @@ minions["Metadata/Monsters/GhostPirates/GhostPirateGreenBladeVortex"] = { mod("BlockChance", "BASE", 20, 0, 0), -- MonsterAttackSpellBlock20Bypass40 [monster_base_block_% = 20] mod("SpellBlockChance", "BASE", 20, 0, 0), -- MonsterAttackSpellBlock20Bypass40 [base_spell_block_% = 20] mod("BlockEffect", "BASE", 40, 0, 0), -- MonsterAttackSpellBlock20Bypass40 [base_block_%_damage_taken = 40] + -- set_use_melee_pattern_range [set_use_melee_pattern_range = 0] }, } -- Undying Grappler @@ -1338,6 +1349,7 @@ minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearBloodDelve"] = { "VaalincursionMortar", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -25] }, } minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearBloodChampionDelve"] = { @@ -1362,6 +1374,7 @@ minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearBloodChampionDelve"] = "VaalIncursionSpecialBeamCannonBlood", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -25] }, } minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearChaosDelve"] = { @@ -1385,6 +1398,7 @@ minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearChaosDelve"] = { "FireballIncursionChaos", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -25] }, } minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearChaosChampionDelve"] = { @@ -1410,6 +1424,7 @@ minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearChaosChampionDelve"] = "IncursionMeteorUpheaval", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -25] }, } minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearFireDelve"] = { @@ -1433,6 +1448,7 @@ minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearFireDelve"] = { "FireballIncusionFire", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -25] }, } minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearFireChampionDelve_"] = { @@ -1457,6 +1473,7 @@ minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearFireChampionDelve_"] = "VaalIncursionFirestorm", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -25] }, } minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearLightningDelve"] = { @@ -1480,6 +1497,7 @@ minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearLightningDelve"] = { "FireballIncusionLightning", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -25] }, } minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearLightningChampionDelve_"] = { @@ -1505,6 +1523,7 @@ minions["Metadata/Monsters/KitavaCultist/VaalCultistSpearLightningChampionDelve_ "SummonedSparkDaemonLightning", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -25] }, } -- Kitava's Herald @@ -1754,6 +1773,7 @@ minions["Metadata/Monsters/Monkeys/FlameBearer"] = { "FlamebearerFlameBlue", }, modList = { + -- set_base_number_of_totems_allowed [set_base_number_of_totems_allowed = 5] }, } -- Stone golem @@ -1825,6 +1845,8 @@ minions["Metadata/Monsters/Necromancer/NecromancerConductivity"] = { }, modList = { -- MonsterRaisesUndeadText [monster_raises_undead_text = 1] + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 180] + -- hexes_not_tracked [hexes_not_tracked = 1] }, } minions["Metadata/Monsters/Necromancer/NecromancerEnfeebleCurse"] = { @@ -1850,6 +1872,8 @@ minions["Metadata/Monsters/Necromancer/NecromancerEnfeebleCurse"] = { }, modList = { -- MonsterRaisesUndeadText [monster_raises_undead_text = 1] + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 180] + -- hexes_not_tracked [hexes_not_tracked = 1] }, } minions["Metadata/Monsters/Necromancer/NecromancerFlamability"] = { @@ -1875,6 +1899,8 @@ minions["Metadata/Monsters/Necromancer/NecromancerFlamability"] = { modList = { -- MonsterRaisesUndeadText [monster_raises_undead_text = 1] -- ImmuneToLavaDamage [immune_to_lava_damage = 1] + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 180] + -- hexes_not_tracked [hexes_not_tracked = 1] }, } minions["Metadata/Monsters/Necromancer/NecromancerFrostbite"] = { @@ -1899,6 +1925,8 @@ minions["Metadata/Monsters/Necromancer/NecromancerFrostbite"] = { }, modList = { -- MonsterRaisesUndeadText [monster_raises_undead_text = 1] + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 180] + -- hexes_not_tracked [hexes_not_tracked = 1] }, } minions["Metadata/Monsters/Necromancer/NecromancerElementalWeakness"] = { @@ -1923,6 +1951,8 @@ minions["Metadata/Monsters/Necromancer/NecromancerElementalWeakness"] = { }, modList = { -- MonsterRaisesUndeadText [monster_raises_undead_text = 1] + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 180] + -- hexes_not_tracked [hexes_not_tracked = 1] }, } minions["Metadata/Monsters/Necromancer/NecromancerProjectileWeakness"] = { @@ -1947,6 +1977,8 @@ minions["Metadata/Monsters/Necromancer/NecromancerProjectileWeakness"] = { }, modList = { -- MonsterRaisesUndeadText [monster_raises_undead_text = 1] + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 180] + -- hexes_not_tracked [hexes_not_tracked = 1] }, } minions["Metadata/Monsters/Necromancer/NecromancerVulnerability"] = { @@ -1971,6 +2003,8 @@ minions["Metadata/Monsters/Necromancer/NecromancerVulnerability"] = { }, modList = { -- MonsterRaisesUndeadText [monster_raises_undead_text = 1] + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 180] + -- hexes_not_tracked [hexes_not_tracked = 1] }, } -- Undying Bomber @@ -2238,6 +2272,7 @@ minions["Metadata/Monsters/Skeletons/SkeletonMeleeLarge"] = { }, modList = { -- MonsterNecromancerRaisable [undead_description = 1] + -- set_use_melee_pattern_range [set_use_melee_pattern_range = 0] }, } minions["Metadata/Monsters/Skeletons/SkeletonBowLightning3"] = { @@ -2428,6 +2463,8 @@ minions["Metadata/Monsters/Skeletons/SkeletonBlackCaster1_"] = { modList = { -- MonsterNecromancerRaisable [undead_description = 1] -- MonsterNoMapDrops [monster_no_map_drops = 1] + -- set_use_melee_pattern_range [set_use_melee_pattern_range = 0] + -- set_immune_to_cheats [set_immune_to_cheats = 1] }, } minions["Metadata/Monsters/Skeletons/SkeletonBowProjectileWeaknessCurse"] = { @@ -2478,6 +2515,7 @@ minions["Metadata/Monsters/Skeletons/SkeletonMeleeKnightElementalSwordIncursionC "IncursionLeapSlamChampion", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -50] }, } minions["Metadata/Monsters/Skeletons/SkeletonBowKnightElemental"] = { @@ -2529,6 +2567,8 @@ minions["Metadata/Monsters/Skeletons/SkeletonMeleeBlackAbyssBoneLance"] = { -- BreachReducedBeyondPortalChance [monster_beyond_portal_chance_+%_final = -66] -- BreachReducedBeyondPortalChance [monster_hellscape_charge_+% = -66] -- VariableEmergeSpeedAbyss [emerge_speed_+% = 0] + -- set_use_melee_pattern_range [set_use_melee_pattern_range = 0] + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -80] }, } minions["Metadata/Monsters/SkeletonCannon/SkeletonCannon1"] = { @@ -2623,6 +2663,7 @@ minions["Metadata/Monsters/Spiders/SpiderThornFlickerStrike"] = { "MonsterFlickerStrike", }, modList = { + -- set_is_spider [set_is_spider = 1] }, } minions["Metadata/Monsters/Spiders/SpiderThornViperStrikeFlickerStrike"] = { @@ -2645,6 +2686,7 @@ minions["Metadata/Monsters/Spiders/SpiderThornViperStrikeFlickerStrike"] = { "MonsterFlickerStrike", }, modList = { + -- set_is_spider [set_is_spider = 1] }, } -- Statue @@ -2671,6 +2713,7 @@ minions["Metadata/Monsters/Statue/DaressoStatueLargeMaleSpear"] = { modList = { -- MonsterSpeedAndDamageFixupComplete [monster_base_type_attack_cast_speed_+%_and_damage_-%_final = 33] -- MonsterCastsPunctureText [monster_casts_puncture_text = 1] + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 400] }, } minions["Metadata/Monsters/Statue/StoneStatueMaleBow"] = { @@ -2697,6 +2740,7 @@ minions["Metadata/Monsters/Statue/StoneStatueMaleBow"] = { modList = { -- MonsterSpeedAndDamageFixupSmall [monster_base_type_attack_cast_speed_+%_and_damage_-%_final = 11] -- MonsterFiresIceShotArrowsText [monster_fires_ice_shot_arrows_text = 1] + -- mana_regeneration_rate_per_minute_% [mana_regeneration_rate_per_minute_% = 400] }, } -- Ophidian @@ -3090,6 +3134,7 @@ minions["Metadata/Monsters/LeagueHarvest/Blue/HarvestNessaCrabT3Spectre"] = { modList = { -- BreachReducedBeyondPortalChance [monster_beyond_portal_chance_+%_final = -66] -- BreachReducedBeyondPortalChance [monster_hellscape_charge_+% = -66] + -- damage_hit_effect_index [damage_hit_effect_index = 2] }, } -- Primal Rhex Matriarch @@ -3121,6 +3166,7 @@ minions["Metadata/Monsters/LeagueHarvest/Blue/HarvestRhexT3Spectre"] = { modList = { -- BreachReducedBeyondPortalChance [monster_beyond_portal_chance_+%_final = -66] -- BreachReducedBeyondPortalChance [monster_hellscape_charge_+% = -66] + -- damage_hit_effect_index [damage_hit_effect_index = 2] }, } -- Templar Tactician @@ -3202,6 +3248,7 @@ minions["Metadata/Monsters/LeagueBetrayal/BetrayalSecretPolice2Spectre_"] = { "EmptyActionAttackSecretPoliceDaggers", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -30] }, } -- Cloud Retch @@ -3368,6 +3415,11 @@ minions["Metadata/Monsters/LeagueUltimatum/Guard/GuardBowColdWeakSpectre"] = { "UltimatumGuardConeArrowCold", }, modList = { + -- monster_beyond_portal_chance_+%_final [monster_beyond_portal_chance_+%_final = -75] + -- monster_hellscape_charge_+% [monster_hellscape_charge_+% = -75] + -- monster_affliction_reward_kills_+% [monster_affliction_reward_kills_+% = -75] + -- set_additional_life_scaling_index [set_additional_life_scaling_index = 19] + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -20] }, } -- Trial Windchaser @@ -3395,6 +3447,11 @@ minions["Metadata/Monsters/LeagueUltimatum/Guard/GuardBowColdSpectre"] = { "UltimatumGuardConeArrowCold", }, modList = { + -- monster_beyond_portal_chance_+%_final [monster_beyond_portal_chance_+%_final = -75] + -- monster_hellscape_charge_+% [monster_hellscape_charge_+% = -75] + -- monster_affliction_reward_kills_+% [monster_affliction_reward_kills_+% = -75] + -- set_additional_life_scaling_index [set_additional_life_scaling_index = 19] + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -20] }, } -- Hyrri's Watch @@ -3746,6 +3803,9 @@ minions["Metadata/Monsters/LeagueCrucible/Cold/Pyromaniac"] = { "CrucibleIceStormTrap", }, modList = { + -- set_additional_life_scaling_index [set_additional_life_scaling_index = 14] + -- is_crucible_monster [is_crucible_monster = 1] + -- monster_beyond_portal_chance_+%_final [monster_beyond_portal_chance_+%_final = -33] }, } -- Wretched Defiler @@ -3907,6 +3967,9 @@ minions["Metadata/Monsters/LeagueCrucible/Lightning/Vendigo_"] = { "EASCrucibleVendigoEnrage", }, modList = { + -- set_additional_life_scaling_index [set_additional_life_scaling_index = 14] + -- is_crucible_monster [is_crucible_monster = 1] + -- monster_beyond_portal_chance_+%_final [monster_beyond_portal_chance_+%_final = -33] }, } @@ -4325,6 +4388,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/KudukuLow"] = { "AzmeriKudukuWarp", }, modList = { + mod("CurseImmune", "FLAG", 0, 0, 0), -- set_immune_to_curses [set_immune_to_curses = 0] }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/KudukuMid"] = { @@ -4349,6 +4413,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/KudukuMid"] = { "AzmeriKudukuWrath", }, modList = { + mod("CurseImmune", "FLAG", 0, 0, 0), -- set_immune_to_curses [set_immune_to_curses = 0] }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/KudukuHigh"] = { @@ -4373,6 +4438,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/KudukuHigh"] = { "AzmeriKudukuWrath", }, modList = { + mod("CurseImmune", "FLAG", 0, 0, 0), -- set_immune_to_curses [set_immune_to_curses = 0] mod("AllyModifier", "LIST", { mod = flag("LightningLuckHits") }), }, } @@ -4958,6 +5024,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DeathKnightLow"] = { "WalkEmergeExpeditionDeathKnight", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -50] }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DeathKnightMid"] = { @@ -4983,6 +5050,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DeathKnightMid"] = { "WalkEmergeExpeditionDeathKnight", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -50] }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DeathKnightHigh"] = { @@ -5008,6 +5076,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DeathKnightHigh"] = { "WalkEmergeExpeditionDeathKnight", }, modList = { + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -50] }, } -- Slashing Horror @@ -5454,6 +5523,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/HarvestBirdLow"] = { "GSAzmeriBirdDashZap", }, modList = { + -- damage_hit_effect_index [damage_hit_effect_index = 2] }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/HarvestBirdMid"] = { @@ -5484,6 +5554,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/HarvestBirdMid"] = { "GSAzmeriBirdDashZap", }, modList = { + -- damage_hit_effect_index [damage_hit_effect_index = 2] }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/HarvestBirdHigh"] = { @@ -5516,6 +5587,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/HarvestBirdHigh"] = { "AzmeriBirdGraceHardMode", }, modList = { + -- damage_hit_effect_index [damage_hit_effect_index = 2] }, } -- Primal Demiurge @@ -6517,6 +6589,8 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SlammerDemonLow"] = { "AfflictionMinionPhysSlamCircleRectangle", }, modList = { + -- set_is_affliction_monster [set_is_affliction_monster = 1] + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -60] }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SlammerDemonMid"] = { @@ -6541,6 +6615,8 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SlammerDemonMid"] = { "AfflictionMinionPhysSlamCircleRectangle", }, modList = { + -- set_is_affliction_monster [set_is_affliction_monster = 1] + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -60] }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SlammerDemonHigh"] = { @@ -6565,6 +6641,8 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SlammerDemonHigh"] = { "AfflictionMinionPhysSlamCircleRectangle", }, modList = { + -- set_is_affliction_monster [set_is_affliction_monster = 1] + -- map_related_item_drop_chance_+%_final_from_league [map_related_item_drop_chance_+%_final_from_league = -60] }, } -- Riftcaster diff --git a/src/Export/Classes/GGPKData.lua b/src/Export/Classes/GGPKData.lua index 0fb747a709..70286211c0 100644 --- a/src/Export/Classes/GGPKData.lua +++ b/src/Export/Classes/GGPKData.lua @@ -43,6 +43,7 @@ local GGPKClass = newClass("GGPKData", function(self, path, datPath, reExport) self.dat = { } self.txt = { } + self.ot = { } if USE_DAT64 then self:AddDat64Files() @@ -59,15 +60,16 @@ function GGPKClass:CleanDir(reExport) end end -function GGPKClass:ExtractFilesWithBun(fileListStr) - local cmd = 'cd ' .. self.oozPath .. ' && bun_extract_file.exe extract-files "' .. self.path .. '" . ' .. fileListStr +function GGPKClass:ExtractFilesWithBun(fileListStr, useRegex) + local useRegex = useRegex or false + local cmd = 'cd ' .. self.oozPath .. ' && bun_extract_file.exe extract-files ' .. (useRegex and '--regex "' or '"') .. self.path .. '" . ' .. fileListStr ConPrintf(cmd) os.execute(cmd) end function GGPKClass:ExtractFiles(reExport) if reExport then - local datList, txtList, itList = self:GetNeededFiles() + local datList, txtList, otList, itList = self:GetNeededFiles() local sweetSpotCharacter = 6000 local fileList = '' for _, fname in ipairs(datList) do @@ -82,6 +84,10 @@ function GGPKClass:ExtractFiles(reExport) fileList = '' end end + + for _, fname in ipairs(otList) do + self:ExtractFilesWithBun('"' .. fname .. '"', true) + end for _, fname in ipairs(txtList) do fileList = fileList .. '"' .. fname .. '" ' @@ -113,6 +119,30 @@ function GGPKClass:ExtractFiles(reExport) end end +function GGPKClass:ExtractList(listToExtract, cache, useRegex) + useRegex = useRegex or false + local sweetSpotCharacter = 6000 + printf("Extracting ...") + local fileList = '' + for _, fname in ipairs(listToExtract) do + -- we are going to validate if the file is already extracted in this session + if not cache[fname] then + cache[fname] = true + fileList = fileList .. '"' .. string.lower(fname) .. '" ' + + if fileList:len() > sweetSpotCharacter then + self:ExtractFilesWithBun(fileList, useRegex) + fileList = '' + end + end + end + + if fileList:len() > 0 then + self:ExtractFilesWithBun(fileList, useRegex) + fileList = '' + end +end + function GGPKClass:AddDatFiles() local datFiles = scanDir(self.oozPath .. "Data\\", '%w+%.dat$') for _, f in ipairs(datFiles) do @@ -309,8 +339,8 @@ function GGPKClass:GetNeededFiles() "Metadata/StatDescriptions/graft_stat_descriptions.txt", } local otFiles = { - "Metadata/Characters/Character.ot", - "Metadata/Monsters/Monster.ot", + "^Metadata/Monsters/(?:[\\w-]+/)*[\\w-]+\\.ot$", + "^Metadata/Characters/(?:[\\w-]+/)*[\\w-]+\\.ot$", } local itFiles = { "Metadata/Items/Quivers/AbstractQuiver.it", diff --git a/src/Export/Minions/Minions.txt b/src/Export/Minions/Minions.txt index 4179a20935..d7d855069a 100644 --- a/src/Export/Minions/Minions.txt +++ b/src/Export/Minions/Minions.txt @@ -84,8 +84,6 @@ local minions, mod = ... #emit #monster Metadata/Monsters/AnimatedItem/AnimatedArmour AnimatedArmour -#mod mod("Speed", "MORE", 10, ModFlag.Attack, 0, { type = "Condition", var = "DualWielding" }) -#mod mod("BlockChance", "BASE", 15, 0, 0, { type = "Condition", var = "DualWielding" }) #emit #monster Metadata/Monsters/IcyRagingSpirit/IcyRagingSpirit IcyRagingSpirit diff --git a/src/Export/Scripts/minions.lua b/src/Export/Scripts/minions.lua index cc1e8f9175..e8f984dd64 100644 --- a/src/Export/Scripts/minions.lua +++ b/src/Export/Scripts/minions.lua @@ -38,6 +38,41 @@ local function tableToString(tbl, pre) return tableString .. " }" end +local function getOTStats(OTFile, modList) + local file = OTFile..".ot" + local text + if main.ggpk.ot[file] then + text = main.ggpk.ot[file] + elseif getFile(file) then + text = convertUTF16to8(getFile(file)) + main.ggpk.ot[file] = text + else + print("Invalid OT File location: "..file) + return modList + end + local inWantedBlock = false + if text then + for line in text:gmatch("[^\r\n]+") do + local superClass = line:match("extends \"(.+)\"") + if superClass and superClass ~= "Metadata/Monsters/Monster" and superClass ~= "nothing" then + modList = getOTStats(superClass, modList) + end + -- Detect start of a block + if line:match("^Stats") then + inWantedBlock = true + elseif inWantedBlock and line:match("^}") then + inWantedBlock = false + elseif inWantedBlock and line:find("=") and not line:find("//") then + local key, value = line:gsub("%s+",""):match("^(.-)=(.+)$") + if key and value then + table.insert(modList, { Id = key, Stat1 = { Id = key }, Stat1Value = { tonumber(value) } }) + end + end + end + end + return modList +end + local itemClassMap = { ["Claw"] = "Claw", ["Dagger"] = "Dagger", @@ -175,6 +210,9 @@ directiveTable.emit = function(state, args, out) for _, mod in ipairs(monsterVariety.SpecialMods) do table.insert(modList, mod) end + if monsterVariety.ObjectType and monsterVariety.ObjectType ~= "Metadata/Monsters/Monster"then + modList = getOTStats(monsterVariety.ObjectType, modList) + end out:write('\tmodList = {\n') for _, mod in ipairs(modList) do local modStats = "" diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index 37f2a11d01..4f399cf7c8 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -1276,14 +1276,15 @@ function calcs.defence(env, actor) if output.EnergyShieldRechargeAppliesToLife or output.EnergyShieldRechargeAppliesToEnergyShield then local inc = modDB:Sum("INC", nil, "EnergyShieldRecharge") local more = modDB:More(nil, "EnergyShieldRecharge") + local base = modDB:Override(nil, "EnergyShieldRecharge") or data.misc.EnergyShieldRechargeBase if output.EnergyShieldRechargeAppliesToLife then - local recharge = output.Life * data.misc.EnergyShieldRechargeBase * (1 + inc/100) * more + local recharge = output.Life * base * (1 + inc/100) * more output.LifeRecharge = round(recharge * output.LifeRecoveryRateMod) if breakdown then breakdown.LifeRecharge = { } breakdown.multiChain(breakdown.LifeRecharge, { label = "Recharge rate:", - base = { "%.1f ^8(33%% per second)", output.Life * data.misc.EnergyShieldRechargeBase }, + base = { "%.1f ^8(%d%% per second)", output.Life * base, base * 100 }, { "%.2f ^8(increased/reduced)", 1 + inc/100 }, { "%.2f ^8(more/less)", more }, total = s_format("= %.1f ^8per second", recharge), @@ -1296,13 +1297,13 @@ function calcs.defence(env, actor) }) end else - local recharge = output.EnergyShield * data.misc.EnergyShieldRechargeBase * (1 + inc/100) * more + local recharge = output.EnergyShield * base * (1 + inc/100) * more output.EnergyShieldRecharge = round(recharge * output.EnergyShieldRecoveryRateMod) if breakdown then breakdown.EnergyShieldRecharge = { } breakdown.multiChain(breakdown.EnergyShieldRecharge, { label = "Recharge rate:", - base = { "%.1f ^8(33%% per second)", output.EnergyShield * data.misc.EnergyShieldRechargeBase }, + base = { "%.1f ^8(%d%% per second)", output.EnergyShield * base, base * 100 }, { "%.2f ^8(increased/reduced)", 1 + inc/100 }, { "%.2f ^8(more/less)", more }, total = s_format("= %.1f ^8per second", recharge), diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index a00d405b41..a366e5796a 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -85,10 +85,11 @@ function doActorLifeMana(actor) local base = modDB:Sum("BASE", nil, "Life") local inc = modDB:Sum("INC", nil, "Life") local more = modDB:More(nil, "Life") + local override = modDB:Override(nil, "Life") local conv = modDB:Sum("BASE", nil, "LifeConvertToEnergyShield") - output.Life = m_max(round(base * (1 + inc/100) * more * (1 - conv/100)), 1) + output.Life = override or m_max(round(base * (1 + inc/100) * more * (1 - conv/100)), 1) if breakdown then - if inc ~= 0 or more ~= 1 or conv ~= 0 then + if inc ~= 0 or more ~= 1 or conv ~= 0 or override then breakdown.Life = { } breakdown.Life[1] = s_format("%g ^8(base)", base) if inc ~= 0 then @@ -97,8 +98,11 @@ function doActorLifeMana(actor) if more ~= 1 then t_insert(breakdown.Life, s_format("x %.2f ^8(more/less)", more)) end - if conv ~= 0 then - t_insert(breakdown.Life, s_format("x %.2f ^8(converted to Energy Shield)", 1 - conv/100)) + if inc ~= 0 then + t_insert(breakdown.Life, s_format("x %.2f ^8(increased/reduced)", 1 + inc/100)) + end + if override then + t_insert(breakdown.Life, s_format("= %g ^8(life override)", override)) end t_insert(breakdown.Life, s_format("= %g", output.Life)) end @@ -879,7 +883,7 @@ local function doActorCharges(env, actor) -- Calculate current and maximum charges output.PowerChargesMin = m_max(modDB:Sum("BASE", nil, "PowerChargesMin"), 0) - output.PowerChargesMax = m_max(modDB:Sum("BASE", nil, "PowerChargesMax"), 0) + output.PowerChargesMax = modDB:Override(nil, "PowerChargesMax") or m_max(modDB:Sum("BASE", nil, "PowerChargesMax"), 0) output.PowerChargesDuration = m_floor(modDB:Sum("BASE", nil, "ChargeDuration") * calcLib.mod(modDB, nil, "PowerChargesDuration", "ChargeDuration")) if modDB:Flag(nil, "MaximumFrenzyChargesIsMaximumPowerCharges") then local source = modDB.mods["MaximumFrenzyChargesIsMaximumPowerCharges"][1].source @@ -888,7 +892,7 @@ local function doActorCharges(env, actor) end end output.FrenzyChargesMin = m_max(modDB:Sum("BASE", nil, "FrenzyChargesMin"), 0) - output.FrenzyChargesMax = m_max(modDB:Flag(nil, "MaximumFrenzyChargesIsMaximumPowerCharges") and output.PowerChargesMax or modDB:Sum("BASE", nil, "FrenzyChargesMax"), 0) + output.FrenzyChargesMax = modDB:Override(nil, "FrenzyChargesMax") or m_max(modDB:Flag(nil, "MaximumFrenzyChargesIsMaximumPowerCharges") and output.PowerChargesMax or modDB:Sum("BASE", nil, "FrenzyChargesMax"), 0) output.FrenzyChargesDuration = m_floor(modDB:Sum("BASE", nil, "ChargeDuration") * calcLib.mod(modDB, nil, "FrenzyChargesDuration", "ChargeDuration")) if modDB:Flag(nil, "MaximumEnduranceChargesIsMaximumFrenzyCharges") then local source = modDB.mods["MaximumEnduranceChargesIsMaximumFrenzyCharges"][1].source @@ -897,7 +901,7 @@ local function doActorCharges(env, actor) end end output.EnduranceChargesMin = m_max(modDB:Sum("BASE", nil, "EnduranceChargesMin"), 0) - output.EnduranceChargesMax = m_max(env.partyMembers.modDB:Flag(nil, "PartyMemberMaximumEnduranceChargesEqualToYours") and env.partyMembers.output.EnduranceChargesMax or (modDB:Flag(nil, "MaximumEnduranceChargesIsMaximumFrenzyCharges") and output.FrenzyChargesMax or modDB:Sum("BASE", nil, "EnduranceChargesMax")), 0) + output.EnduranceChargesMax = modDB:Override(nil, "EnduranceChargesMax") or m_max(env.partyMembers.modDB:Flag(nil, "PartyMemberMaximumEnduranceChargesEqualToYours") and env.partyMembers.output.EnduranceChargesMax or (modDB:Flag(nil, "MaximumEnduranceChargesIsMaximumFrenzyCharges") and output.FrenzyChargesMax or modDB:Sum("BASE", nil, "EnduranceChargesMax")), 0) output.EnduranceChargesDuration = m_floor(modDB:Sum("BASE", nil, "ChargeDuration") * calcLib.mod(modDB, nil, "EnduranceChargesDuration", "ChargeDuration")) output.SiphoningChargesMax = m_max(modDB:Sum("BASE", nil, "SiphoningChargesMax"), 0) output.ChallengerChargesMax = m_max(modDB:Sum("BASE", nil, "ChallengerChargesMax"), 0)