From 6f54a3587f27a79356ad7c657822757e57cdff48 Mon Sep 17 00:00:00 2001 From: Tom Herbert <18316812+taherbert@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:14:56 -0700 Subject: [PATCH] [Devourer] The Hunt lands empowered when Metamorphosis is entered mid-leap The Hunt is a charge, so its leap scales with distance. Opening distance with Vengeful Retreat first keeps the Devourer airborne long enough to enter Metamorphosis before The Hunt lands. The impact then lands during Meta and is empowered by Demonic Intensity, the same hit Predator's Wake deals, while only The Hunt's cooldown is spent. Violent Transformation resets Predator's Wake, so it can still be cast again in the same window for its own Voidsurge. The leap keeps its short flat travel in melee and for other specs, so the default action list is unaffected. --- engine/class_modules/sc_demon_hunter.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/engine/class_modules/sc_demon_hunter.cpp b/engine/class_modules/sc_demon_hunter.cpp index 3c9830ea971..d412de42986 100644 --- a/engine/class_modules/sc_demon_hunter.cpp +++ b/engine/class_modules/sc_demon_hunter.cpp @@ -86,6 +86,7 @@ constexpr unsigned MAX_SOUL_FRAGMENTS = 6; constexpr unsigned HAVOC_MAX_SOUL_FRAGMENTS = 5; constexpr unsigned DEVOURER_MAX_SOUL_FRAGMENTS = 10; constexpr double VENGEFUL_RETREAT_DISTANCE = 20.0; +constexpr double THE_HUNT_LEAP_SPEED = 25.0; // yd/s, approximate The Hunt charge speed (no velocity in spell data) enum class soul_fragment : unsigned { @@ -5498,6 +5499,15 @@ struct the_hunt_base_t timespan_t travel_time() const override { + // The Hunt charges to its target, so the leap scales with distance. A Devourer that opens + // distance with Vengeful Retreat first stays airborne long enough to enter Metamorphosis + // mid-leap, so the impact lands during Meta and is empowered by Demonic Intensity just like + // Predator's Wake. In melee, and for other specs, the flat short travel is kept. + if ( dh()->specialization() == DEMON_HUNTER_DEVOURER && dh()->buff.vengeful_retreat_move->check() ) + { + const double distance = dh()->buff.vengeful_retreat_move->distance_moved; + return std::max( 100_ms, timespan_t::from_seconds( distance / THE_HUNT_LEAP_SPEED ) ); + } return 100_ms; } };