Skip to content

Commit

Permalink
Modifiers november 2023 (#3579)
Browse files Browse the repository at this point in the history
* Chaos modifier: Modifiers that your hero didn't have before will now be prioritized when you random a modifier on respawn.
* Hyper Active modifier now provides only 5% cooldown reduction for all items.
* Hyper Active modifier now provides only 5% cooldown reduction for Dazzle Bad Juju, Earth Spirit Rolling Boulder and Faceless Void Time Walk.
* Hyper Lifesteal lifesteal and spell lifesteal against creeps reduced from 25% to 15%.
* Hyper Lifesteal: Fixed lifesteal and spell lifesteal getting amplified by healing amplification instead of lifesteal amplification and spell lifesteal amplification respectively.
* Octarine Soul cooldown reduction per point of Intelligence increased from 0.08% to 0.1%
* Octarine Soul modifier no longer stacks with Hyper Active and Pro-Active modifiers.
* Octarine Soul modifier no longer works for Dazzle Bad Juju.
* Octarine Soul modifier no longer works for items.
* Pro-Active modifier now provides only 10% cooldown reduction for Dazzle Bad Juju, Earth Spirit Rolling Boulder, Faceless Void Time Walk, Slark Shadow Dance, Terrorblade Sunder and Ursa Enrage.
  • Loading branch information
DarkoniusXNG authored Nov 8, 2023
1 parent 0442732 commit d02b209
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 131 deletions.
16 changes: 8 additions & 8 deletions game/resource/English/panorama/game_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,15 @@
"game_option_buyback" "Enabled Buyback"

"game_option_random_description" "This modifier will be revealed when the game starts!"
"game_option_lifesteal_description" "75% lifesteal and spell lifesteal against heroes. 25% against creeps and illusions."
"game_option_lifesteal_description" "75% lifesteal and spell lifesteal against heroes. 15% against creeps and illusions."
"game_option_aoe_radius_description" "Most spells' and items' radius (AoE) increased by 50%."
"game_option_blood_magic_description" "Spells cost health equal to 2.5 times their mana cost. All mana (except base mana) turned into bonus hp. All mana regen turned into bonus hp regen."
"game_option_timeless_relic_description" "Bonus 30% debuff duration and bonus 30% spell amplification."
"game_option_echo_strike_description" "25% chance for every attack to proc another attack. Can proc on any attack."
"game_option_hyper_active_description" "25% cooldown reduction, 25% mana-cost reduction and 25% status resistance."
"game_option_hyper_active_description" "25% cooldown reduction (5% for all items and some abilities), 25% mana-cost reduction and 25% status resistance."
"game_option_quick_spells_description" "No cast points. Casting spells doesn't require facing. Channelling spells still have channel time."
"game_option_physical_immune_description" "Immune to attack damage and spells that deal physical damage."
"game_option_pro_active_description" "50% cooldown reduction. Affected by permanent Break (passives-disabled)."
"game_option_pro_active_description" "50% cooldown reduction (10% for all items and some abilities). Affected by permanent Break (passives-disabled)."
"game_option_spell_block_description" "Bonus 30% magic resistance, bonus 30% status resistance and 30% chance to block a single-targeted spell. Spell Block has a 10s cooldown."
"game_option_attack_switch_description" "Melee heroes become ranged and ranged heroes become melee. After the switch: Melee heroes gain 50 bonus hp per level and ranged heroes gain 5 bonus attack speed per level."
"game_option_hyper_experience_description" "Heroes gain 3x experience from all sources."
Expand All @@ -97,16 +97,16 @@
"game_option_splasher_description" "Any damage dealt splashes in 300 radius around the damaged unit."
"game_option_titan_soul_description" "+1 all stats per hero level. You are bigger, you have free-Pathing and every second you deal damage to enemies within 300 radius. Damage is 2x your primary attribute (2/3 of all stats for Universal)."
"game_option_white_queen_description" "Debuff Immunity while casting or channelling an ability."
"game_option_octarine_soul_description" "0.08% cooldown reduction per point of Intelligence. Some abilities and items are unaffected."
"game_option_octarine_soul_description" "0.1% cooldown reduction per point of Intelligence. All items and some abilities are unaffected."
"game_option_smurf_description" "Grants 5 strength per hero level. You are smaller and most spells' and items' AoEs are decreased by 25%."
"game_option_speedster_description" "Grants 50% movement speed, 25% attack speed, 30% cast speed and 100% turn speed."
"game_option_universal_description" "Changes primary attribute to Universal and grants 5% spell amplification, 5% healing amplification and your summons and illusions do 5% more damage and take 5% less damage. Heroes that were Universal originally benefit more from this modifier (25% instead of 5%)."

"game_option_lifesteal_global_description" "All creeps and heroes gain 75% lifesteal and spell lifesteal against heroes. 25% against creeps and illusions."
"game_option_lifesteal_global_description" "All creeps and heroes gain 75% lifesteal and spell lifesteal against heroes. 15% against creeps and illusions."
"game_option_buyback_description" "#{game_option_buyback}"

"DOTA_Tooltip_modifier_any_damage_lifesteal_oaa" "#{game_option_lifesteal}"
"DOTA_Tooltip_modifier_any_damage_lifesteal_oaa_Description" "75%% lifesteal and spell lifesteal against heroes. 25%% against creeps and illusions."
"DOTA_Tooltip_modifier_any_damage_lifesteal_oaa_Description" "75%% lifesteal and spell lifesteal against heroes. 15%% against creeps and illusions."
"DOTA_Tooltip_modifier_aoe_radius_increase_oaa" "#{game_option_aoe_radius}"
"DOTA_Tooltip_modifier_aoe_radius_increase_oaa_Description" "Most spells' and items' radius (AoE) increased by 50%%."
"DOTA_Tooltip_modifier_blood_magic_oaa" "#{game_option_blood_magic}"
Expand All @@ -122,7 +122,7 @@
"DOTA_Tooltip_modifier_physical_immunity_oaa" "#{game_option_physical_immune}"
"DOTA_Tooltip_modifier_physical_immunity_oaa_Description" "#{game_option_physical_immune_description}"
"DOTA_Tooltip_modifier_pro_active_oaa" "#{game_option_pro_active}"
"DOTA_Tooltip_modifier_pro_active_oaa_Description" "50%% cooldown reduction. Most passive abilities are disabled."
"DOTA_Tooltip_modifier_pro_active_oaa_Description" "50%% cooldown reduction. #{DOTA_Tooltip_modifier_silver_edge_debuff_Description}."
"DOTA_Tooltip_modifier_spell_block_oaa" "#{game_option_spell_block}"
"DOTA_Tooltip_modifier_spell_block_oaa_Description" "+30%% magic resistance, +30%% status resistance and 30%% chance to block a single-targeted spell. Spell Block has a 10s cooldown."
"DOTA_Tooltip_modifier_spell_block_cooldown_oaa" "Spell Block Cooldown."
Expand Down Expand Up @@ -211,7 +211,7 @@
"DOTA_Tooltip_modifier_boss_killer_oaa" "Boss Killer"
"DOTA_Tooltip_modifier_boss_killer_oaa_Description" "Dealing 85%% more damage to Bosses. Taking 50%% less damage from Bosses."
"DOTA_Tooltip_modifier_octarine_soul_oaa" "#{game_option_octarine_soul}"
"DOTA_Tooltip_modifier_octarine_soul_oaa_Description" "0.08%% cooldown reduction per point of Intelligence. Some abilities and items are unaffected."
"DOTA_Tooltip_modifier_octarine_soul_oaa_Description" "0.1%% cooldown reduction per point of Intelligence. All items and some abilities are unaffected."
"DOTA_Tooltip_modifier_smurf_oaa" "#{game_option_smurf}"
"DOTA_Tooltip_modifier_smurf_oaa_Description" "+5 STR per hero level. You are smaller and most spells' and items' AoEs are decreased by 25%%."
"DOTA_Tooltip_modifier_speedster_oaa" "#{game_option_speedster}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ end

function modifier_any_damage_lifesteal_oaa:OnCreated(kv)
self.hero_lifesteal = 75
self.creep_lifesteal = 25
self.creep_lifesteal = 15 -- self.hero_lifesteal / 5
self.global = kv.isGlobal == 1

if not self.global and IsServer() then
Expand Down Expand Up @@ -121,15 +121,16 @@ if IsServer() then
end

if heal_amount > 0 then
attacker:Heal(heal_amount, nil)
-- Particle
if inflictor then
-- Spell Lifesteal
attacker:HealWithParams(heal_amount, nil, false, true, attacker, true)
local particle1 = ParticleManager:CreateParticle("particles/items3_fx/octarine_core_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, attacker)
ParticleManager:SetParticleControl(particle1, 0, attacker:GetAbsOrigin())
ParticleManager:ReleaseParticleIndex(particle1)
else
-- Normal Lifesteal
attacker:HealWithParams(heal_amount, nil, true, true, attacker, false)
local particle2 = ParticleManager:CreateParticle("particles/generic_gameplay/generic_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, attacker)
ParticleManager:ReleaseParticleIndex(particle2)
end
Expand Down
64 changes: 35 additions & 29 deletions game/scripts/vscripts/modifiers/funmodifiers/modifier_chaos_oaa.lua
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ function modifier_chaos_oaa:OnIntervalThink()
remove_mod_from_table(self.initial_modifiers, random_mod)
remove_mod_from_table(self.mid_game_modifiers, random_mod)
remove_mod_from_table(self.late_game_modifiers, random_mod)
remove_mod_from_table(self.already_had, random_mod)

local new_random = self.initial_modifiers[RandomInt(1, #self.initial_modifiers)]
if not parent:HasModifier(new_random) then
Expand Down Expand Up @@ -267,6 +268,7 @@ if IsServer() then

local mid_game_time_start = FIRST_DUEL_TIMEOUT + DUEL_INTERVAL
local late_game_time_start = 3*mid_game_time_start
local current_time = HudTimer:GetGameTime()

if self.last_mod then
local mod = self.last_mod
Expand All @@ -275,29 +277,33 @@ if IsServer() then
else
parent:RemoveModifierByName(mod)
end
-- Remove modifiers from the tables if parent already had them at least twice - imitates pseudo random
if HudTimer:GetGameTime() > mid_game_time_start and HudTimer:GetGameTime() <= late_game_time_start then
if not TableContains(self.already_had, mod) then
table.insert(self.already_had, mod)
else
remove_mod_from_table(self.mid_game_modifiers, mod)
end
-- Reset the table if low amount of elements
if #self.mid_game_modifiers <= 3 then
self.mid_game_modifiers = self.already_had
self.already_had = {}
end
elseif HudTimer:GetGameTime() > late_game_time_start then
if not TableContains(self.already_had, mod) then
table.insert(self.already_had, mod)
else
remove_mod_from_table(self.late_game_modifiers, mod)
end
-- Reset the table if low amount of elements
if #self.late_game_modifiers <= 3 then
self.late_game_modifiers = self.already_had
self.already_had = {}

-- Add old modifier to already_had table
if not TableContains(self.already_had, mod) then
table.insert(self.already_had, mod)
end

-- Remove the modifier from the tables because parent already had it
if current_time <= mid_game_time_start then
remove_mod_from_table(self.initial_modifiers, mod)
remove_mod_from_table(self.mid_game_modifiers, mod)
remove_mod_from_table(self.late_game_modifiers, mod)
elseif current_time > mid_game_time_start and current_time <= late_game_time_start then
remove_mod_from_table(self.mid_game_modifiers, mod)
remove_mod_from_table(self.late_game_modifiers, mod)
elseif current_time > late_game_time_start then
remove_mod_from_table(self.late_game_modifiers, mod)
end

-- Reset tables if low amount of elements
if #self.initial_modifiers < 2 then
self.initial_modifiers = self.already_had
end
if #self.mid_game_modifiers < 2 then
self.mid_game_modifiers = self.already_had
end
if #self.late_game_modifiers < 2 then
self.late_game_modifiers = self.already_had
end
end

Expand All @@ -307,13 +313,13 @@ if IsServer() then

local repeat_loop = true
while repeat_loop do
local random_mod = self.late_game_modifiers[RandomInt(1, #self.late_game_modifiers)]
if HudTimer then
if HudTimer:GetGameTime() <= mid_game_time_start then
random_mod = self.initial_modifiers[RandomInt(1, #self.initial_modifiers)]
elseif HudTimer:GetGameTime() > mid_game_time_start and HudTimer:GetGameTime() <= late_game_time_start then
random_mod = self.mid_game_modifiers[RandomInt(1, #self.mid_game_modifiers)]
end
local random_mod
if current_time <= mid_game_time_start then
random_mod = self.initial_modifiers[RandomInt(1, #self.initial_modifiers)]
elseif current_time > mid_game_time_start and current_time <= late_game_time_start then
random_mod = self.mid_game_modifiers[RandomInt(1, #self.mid_game_modifiers)]
elseif current_time > late_game_time_start then
random_mod = self.late_game_modifiers[RandomInt(1, #self.late_game_modifiers)]
end
if random_mod ~= self.last_mod and not parent:HasModifier(random_mod) then
self.actual_mod = parent:AddNewModifier(parent, nil, random_mod, {})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ function modifier_duelist_oaa:RemoveOnDeath()
end

function modifier_duelist_oaa:OnCreated()
self:OnRefresh()
if IsServer() then
self:StartIntervalThink(0.1)
end
Expand Down
51 changes: 7 additions & 44 deletions game/scripts/vscripts/modifiers/funmodifiers/modifier_ham_oaa.lua
Original file line number Diff line number Diff line change
Expand Up @@ -23,51 +23,11 @@ function modifier_ham_oaa:OnCreated()
abaddon_borrowed_time_oaa = true,
brewmaster_primal_split = true,
dark_willow_shadow_realm = true,
dazzle_bad_juju = true,
dazzle_shallow_grave = true,
earth_spirit_petrify = true,
item_abyssal_blade_2 = true,
item_abyssal_blade_3 = true,
item_abyssal_blade_4 = true,
item_abyssal_blade_5 = true,
item_aeon_disk_oaa_2 = true,
item_aeon_disk_oaa_3 = true,
item_aeon_disk_oaa_4 = true,
item_aeon_disk_oaa_5 = true,
item_arcane_blink = true,
item_arcane_blink_2 = true,
item_arcane_blink_3 = true,
item_arcane_blink_4 = true,
item_arcane_blink_5 = true,
item_bubble_orb_1 = true,
item_bubble_orb_2 = true,
item_cyclone = true,
item_magic_lamp_1 = true,
item_reduction_orb_3 = true,
item_refresher_4 = true,
item_refresher_5 = true,
item_regen_crystal_1 = true,
item_regen_crystal_2 = true,
item_regen_crystal_3 = true,
item_regen_crystal_4 = true,
item_sheepstick_4 = true,
item_sheepstick_5 = true,
item_shield_staff = true,
item_shield_staff_2 = true,
item_shield_staff_3 = true,
item_shield_staff_4 = true,
item_shield_staff_5 = true,
item_sphere = true,
item_sphere_2 = true,
item_sphere_3 = true,
item_sphere_4 = true,
item_sphere_5 = true,
item_trumps_fists_1 = true,
item_trumps_fists_2 = true,
item_wind_waker = true,
item_wind_waker_2 = true,
item_wind_waker_3 = true,
item_wind_waker_4 = true,
item_wind_waker_5 = true,
earth_spirit_rolling_boulder = true,
faceless_void_time_walk = true,
meepo_petrify = true,
obsidian_destroyer_astral_imprisonment = true,
oracle_false_promise = true,
Expand All @@ -77,7 +37,10 @@ function modifier_ham_oaa:OnCreated()
riki_tricks_of_the_trade = true,
shadow_demon_disruption = true,
skeleton_king_reincarnation = true,
--slark_shadow_dance = true,
--terrorblade_sunder = true,
tusk_snowball = true,
--ursa_enrage = true,
visage_gravekeepers_cloak = true,
visage_gravekeepers_cloak_oaa = true,
void_spirit_dissimilate = true,
Expand All @@ -103,7 +66,7 @@ function modifier_ham_oaa:GetModifierPercentageCooldown(keys)
return 0
end
local ability = keys.ability
if ability and self.ignore_abilities[ability:GetName()] then
if ability and (self.ignore_abilities[ability:GetName()] or ability:IsItem()) then
return self.cdr_penalty
else
return self.cdr
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,51 +27,11 @@ function modifier_octarine_soul_oaa:OnCreated()
abaddon_borrowed_time_oaa = true,
brewmaster_primal_split = true,
dark_willow_shadow_realm = true,
dazzle_bad_juju = true,
dazzle_shallow_grave = true,
earth_spirit_petrify = true,
item_abyssal_blade_2 = true,
item_abyssal_blade_3 = true,
item_abyssal_blade_4 = true,
item_abyssal_blade_5 = true,
item_aeon_disk_oaa_2 = true,
item_aeon_disk_oaa_3 = true,
item_aeon_disk_oaa_4 = true,
item_aeon_disk_oaa_5 = true,
item_arcane_blink = true,
item_arcane_blink_2 = true,
item_arcane_blink_3 = true,
item_arcane_blink_4 = true,
item_arcane_blink_5 = true,
item_bubble_orb_1 = true,
item_bubble_orb_2 = true,
item_cyclone = true,
item_magic_lamp_1 = true,
item_reduction_orb_3 = true,
item_refresher_4 = true,
item_refresher_5 = true,
item_regen_crystal_1 = true,
item_regen_crystal_2 = true,
item_regen_crystal_3 = true,
item_regen_crystal_4 = true,
item_sheepstick_4 = true,
item_sheepstick_5 = true,
item_shield_staff = true,
item_shield_staff_2 = true,
item_shield_staff_3 = true,
item_shield_staff_4 = true,
item_shield_staff_5 = true,
item_sphere = true,
item_sphere_2 = true,
item_sphere_3 = true,
item_sphere_4 = true,
item_sphere_5 = true,
item_trumps_fists_1 = true,
item_trumps_fists_2 = true,
item_wind_waker = true,
item_wind_waker_2 = true,
item_wind_waker_3 = true,
item_wind_waker_4 = true,
item_wind_waker_5 = true,
--earth_spirit_rolling_boulder = true,
--faceless_void_time_walk = true,
meepo_petrify = true,
obsidian_destroyer_astral_imprisonment = true,
oracle_false_promise = true,
Expand All @@ -81,14 +41,17 @@ function modifier_octarine_soul_oaa:OnCreated()
riki_tricks_of_the_trade = true,
shadow_demon_disruption = true,
skeleton_king_reincarnation = true,
--slark_shadow_dance = true,
--terrorblade_sunder = true,
tusk_snowball = true,
--ursa_enrage = true,
visage_gravekeepers_cloak = true,
visage_gravekeepers_cloak_oaa = true,
void_spirit_dissimilate = true,
witch_doctor_voodoo_switcheroo_oaa = true,
}

self.cdr_per_int = 0.08
self.cdr_per_int = 0.1
end

function modifier_octarine_soul_oaa:DeclareFunctions()
Expand All @@ -99,8 +62,11 @@ end

function modifier_octarine_soul_oaa:GetModifierPercentageCooldown(keys)
local parent = self:GetParent()
if parent:HasModifier("modifier_pro_active_oaa") or parent:HasModifier("modifier_ham_oaa") then
return 0
end
local ability = keys.ability
if ability and self.ignore_abilities[ability:GetName()] then
if ability and (self.ignore_abilities[ability:GetName()] or ability:IsItem()) then
return 0
else
return self.cdr_per_int * parent:GetIntellect()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,24 @@ function modifier_pro_active_oaa:OnCreated()
abaddon_borrowed_time_oaa = true,
brewmaster_primal_split = true,
dark_willow_shadow_realm = true,
--dazzle_good_juju = true,
dazzle_bad_juju = true,
dazzle_shallow_grave = true,
earth_spirit_petrify = true,
earth_spirit_rolling_boulder = true,
faceless_void_time_walk = true,
meepo_petrify = true,
obsidian_destroyer_astral_imprisonment = true,
oracle_fates_edict = true,
oracle_false_promise = true,
oracle_fates_edict = true,
phantom_lancer_doppelwalk = true,
puck_phase_shift = true,
riki_tricks_of_the_trade = true,
shadow_demon_disruption = true,
skeleton_king_reincarnation = true,
slark_shadow_dance = true,
terrorblade_sunder = true,
tusk_snowball = true,
ursa_enrage = true,
venomancer_plague_ward = true,
visage_gravekeepers_cloak = true,
visage_gravekeepers_cloak_oaa = true,
Expand Down

0 comments on commit d02b209

Please sign in to comment.