Skip to content

Commit 5886b17

Browse files
committed
[DemonHunter] voidfall proc rate is stack-dependent
WCL analysis (55,865 eligible casts) shows voidfall building proc chance decreases with current stack count, rather than being a flat rate from spell data (effectN(3) = 35%): 0 stacks: 39.8% [95% CI: 39.2-40.4%] (p<0.0001 vs 35%) 1 stack: 32.1% [95% CI: 31.4-32.7%] (p<0.0001 vs 35%) 2 stacks: 27.5% [95% CI: 26.8-28.3%] (p<0.0001 vs 35%) Defaults set to 40%/32%/27.5%, exposed as player options for tuning. Local sim impact on Vengeance Annihilator build: -1.14% DPS (66,349 -> 65,591), driven by fewer voidfall meteor procs (37.6 -> 36.5 per fight).
1 parent 12b2c91 commit 5886b17

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

engine/class_modules/sc_demon_hunter.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1215,6 +1215,10 @@ class demon_hunter_t : public parse_player_effects_t
12151215
double wounded_quarry_chance_vengeance = 0.30;
12161216
// Proc rate for Wounded Quarry for Havoc
12171217
double wounded_quarry_chance_havoc = 0.10;
1218+
// Proc rate for Voidfall per current building stack count (from WCL analysis)
1219+
double voidfall_proc_chance_0_stacks = 0.40;
1220+
double voidfall_proc_chance_1_stacks = 0.32;
1221+
double voidfall_proc_chance_2_stacks = 0.275;
12181222
// How many seconds that Vengeful Retreat locks out Felblade
12191223
double felblade_lockout_from_vengeful_retreat = 0.6;
12201224
bool enable_dungeon_slice = false;
@@ -2948,7 +2952,22 @@ struct voidfall_building_trigger_t : public BASE
29482952
if ( !BASE::p()->talent.annihilator.voidfall->ok() )
29492953
return;
29502954

2951-
if ( !BASE::rng().roll( BASE::p()->talent.annihilator.voidfall->effectN( 3 ).percent() ) )
2955+
// proc chance decreases with current building stacks (from WCL analysis)
2956+
double proc_chance;
2957+
int stacks = BASE::p()->buff.voidfall_building->check();
2958+
switch ( stacks )
2959+
{
2960+
case 0:
2961+
proc_chance = BASE::p()->options.voidfall_proc_chance_0_stacks;
2962+
break;
2963+
case 1:
2964+
proc_chance = BASE::p()->options.voidfall_proc_chance_1_stacks;
2965+
break;
2966+
default:
2967+
proc_chance = BASE::p()->options.voidfall_proc_chance_2_stacks;
2968+
break;
2969+
}
2970+
if ( !BASE::rng().roll( proc_chance ) )
29522971
return;
29532972

29542973
// can't gain building while spending is up
@@ -10113,6 +10132,9 @@ void demon_hunter_t::create_options()
1011310132
opt_float( "soul_fragment_movement_consume_chance", options.soul_fragment_movement_consume_chance, 0, 1 ) );
1011410133
add_option( opt_float( "wounded_quarry_chance_vengeance", options.wounded_quarry_chance_vengeance, 0, 1 ) );
1011510134
add_option( opt_float( "wounded_quarry_chance_havoc", options.wounded_quarry_chance_havoc, 0, 1 ) );
10135+
add_option( opt_float( "voidfall_proc_chance_0_stacks", options.voidfall_proc_chance_0_stacks, 0, 1 ) );
10136+
add_option( opt_float( "voidfall_proc_chance_1_stacks", options.voidfall_proc_chance_1_stacks, 0, 1 ) );
10137+
add_option( opt_float( "voidfall_proc_chance_2_stacks", options.voidfall_proc_chance_2_stacks, 0, 1 ) );
1011610138
add_option(
1011710139
opt_float( "felblade_lockout_from_vengeful_retreat", options.felblade_lockout_from_vengeful_retreat, 0, 1 ) );
1011810140
add_option( opt_bool( "enable_dungeon_slice", options.enable_dungeon_slice ) );

0 commit comments

Comments
 (0)