From 4c70ae4a9338fa33df190b9e6d492c3ef531a4d6 Mon Sep 17 00:00:00 2001 From: Tom Herbert <18316812+taherbert@users.noreply.github.com> Date: Mon, 29 Jun 2026 13:28:43 -0700 Subject: [PATCH 1/2] [Devourer] Tune Void Metamorphosis fury drain constants First second after entering meta drains 10/s (not 15), and reduced drain while casting Collapsing Star / channeling Void Ray is 0.127x (not 0.15x). Measured from WarcraftLogs per-tick drain across current raid logs. The 15 + 1.455*exp(0.075*s) curve itself matches the logs and is unchanged. --- engine/class_modules/sc_demon_hunter.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/engine/class_modules/sc_demon_hunter.cpp b/engine/class_modules/sc_demon_hunter.cpp index 12eba694eb0..36d9d4f0d54 100644 --- a/engine/class_modules/sc_demon_hunter.cpp +++ b/engine/class_modules/sc_demon_hunter.cpp @@ -12226,14 +12226,14 @@ double demon_hunter_t::fury_state_t::fury_drain_per_second( int stacks ) const if ( has_reduced_drain ) { - // Guess - drain *= 0.15; + // Reduced while casting Collapsing Star / channeling Void Ray. Measured ~0.127 from logs. + drain *= 0.127; } if ( drain_stacks < 1 ) { - // Slow after meta cast - drain = 15; + // Slow first second after meta cast. Measured ~10/s from logs. + drain = 10; } return drain; From 9062618a5b4ef1f1842e79dfd19726b38b7e1233 Mon Sep 17 00:00:00 2001 From: Tom Herbert <18316812+taherbert@users.noreply.github.com> Date: Thu, 2 Jul 2026 14:04:23 -0700 Subject: [PATCH 2/2] [Devourer] Steepen fury drain curve to match cumulative drain timing from logs --- engine/class_modules/sc_demon_hunter.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/engine/class_modules/sc_demon_hunter.cpp b/engine/class_modules/sc_demon_hunter.cpp index 36d9d4f0d54..c9bec69e0e3 100644 --- a/engine/class_modules/sc_demon_hunter.cpp +++ b/engine/class_modules/sc_demon_hunter.cpp @@ -1415,9 +1415,11 @@ class demon_hunter_t : public parse_player_effects_t int drain_stacks; demon_hunter_t* actor; double meta_drain_multiplier = 1.0; + // Fit against per-tick drain event schedules from logs (matches cumulative drain + // timing through end of meta, not just instantaneous rates); see PR #11549. double initial_drain = 15.0; - double exp_factor = 1.455; - double exp_power = 0.075; + double exp_factor = 1.40; + double exp_power = 0.0775; fury_state_t( demon_hunter_t* a ) : start_time( timespan_t::min() ), next_drain_event( nullptr ), drain_stacks( 0 ), actor( a )