Skip to content

[Hunter] Adjust PTR Dark Ranger ST action priorities - #11937

Draft
Alkwer wants to merge 1 commit into
simulationcraft:midnightfrom
Alkwer:mm-ptr-dr-st-priorities
Draft

Alkwer wants to merge 1 commit into
simulationcraft:midnightfrom
Alkwer:mm-ptr-dr-st-priorities

Conversation

@Alkwer

@Alkwer Alkwer commented Oct 12, 2026 •

Copy link
Copy Markdown

The PTR Dark Ranger drst list can start its charge-capping Aimed Shot before a ready Trueshot and leave a ready Black Arrow below Rapid Fire and the later Aimed Shot. This moves Trueshot above that conditional Aimed Shot and the fallback Black Arrow above Rapid Fire. It also defers Wailing Arrow while Precise Shots is down and an Aimed Shot charge is available, unless the Wailing Arrow buff has less than one GCD remaining.

This is a draft for maintainer review and release-build retesting. The patch changes only the PTR drst priorities and the matching generated C++; the existing Precise Shots Black Arrow remains first.

Measured with the official Windows nightly af05b9e, PTR 12.1.5.70077, hotfix 2026-10-07/70077. The PR base is 80f9547; its only change since that nightly is in sc_evoker.cpp. I verified that the base PTR TXT and generated C++ action lists match the tested default. These are simulations of the current PTR model, pending release-build validation.

Patchwerk 1T, fixed_time=1, vary_combat_length=0.2, threads=1, target_error=0, 20,000 requested iterations per cell (19,999 reported samples). Identical gear, talents and simulation settings within each comparison. Personal-profile seed 2026101202; adapted-reference seed 20261231.

Profile / nominal duration Default DPS Proposed DPS Delta Approx. delta SE, pp
Personal, 240s 187957.8 188656.1 +0.372% 0.041
Personal, 300s 188188.6 189005.5 +0.434% 0.035
Personal, 360s 186904.9 187686.6 +0.418% 0.029
Personal, 450s 180698.5 181423.6 +0.401% 0.032
Personal, 600s 176885.0 177667.3 +0.442% 0.024
Adapted MID2, 300s 206539.4 207204.2 +0.322% 0.035
Adapted MID2, 450s 202078.4 203047.3 +0.480% 0.031

Delta SE combines the two reported marginal standard errors, scaled by baseline DPS. Iteration covariance is unavailable, so this is not a paired significance claim. Personal-profile results were also positive in earlier independent-seed 30k and 40k confirmation runs. At 40k, TS/BA alone gave +0.357% / +0.354% at 300s / 450s; adding the WA condition gave +0.427% / +0.418%.

The adapted MID2 profile uses the source MID2 MM gear, dwarf race, omnium and consumables, with its Sentinel talents replaced by the same valid DR talents as the personal profile. This broadens the gear check, not the talent-build check. Its trinkets are Heart + Guillotine; the personal profile uses Font + Heart.

Additional scope checks on the personal ST talent build, 10k iterations, seed 20261231: Patchwerk 2T 300s 249064.9 -> 250352.7 DPS (+0.517%; main target +0.390%). DungeonSlice 208194.2 -> 211117.3 DPS (+1.404%; main target +3.983%). The Slice preset overwrote requested max_time=300 with 360; those two results were checked separately at their actual 360s setting and are supplemental. They are not optimized Hydra/AoE-build benchmarks.

Review points before merge:

  • drst also runs on two targets, with no Trick Shots at higher target counts, and as a fallback from draoe; a broader talent/cleave matrix is still needed.
  • The WA condition is a DPS tradeoff. In the adapted 300s profile, WA buff expirations rise from 0.015 to 0.075 per iteration; the expiry check does not prevent higher-priority actions from delaying WA. Please review that part independently from the TS/BA ordering.
  • This proposal uses the official engine. Movement and the separate Lock and Load movement-model issue are outside this validation. PTR tuning and the release build can change the result.

With this PR checked out, extract the two complete PTR APLs (bash):

git show 80f9547c41b11c6fe15783539459c28ae49acb63:engine/class_modules/apl/hunter/mm_ptr.txt > baseline-apl.simc
git show HEAD:engine/class_modules/apl/hunter/mm_ptr.txt > candidate-apl.simc

Use the pinned af05b9e simulator for both runs. Save the profile below as the indicated file, then run the two APLs against that same profile. The controls in the tables used the binary's native default; earlier native-vs-inline checks found identical collected gameplay data for this baseline. JSON DPS means and mean_std_dev are under sim.players[0].collected_data.dps.

The generated marksmanship_ptr() C++ was rebuilt with the repository's ConvertAPL.py, checked action-for-action against mm_ptr.txt, and its translation unit compiled with MSVC 19.44. Changes outside marksmanship_ptr() were checked to be absent. Full release/CI validation is still pending.

simc dr-personal.simc input=baseline-apl.simc max_time=300 json=baseline.json
simc dr-personal.simc input=candidate-apl.simc max_time=300 json=candidate.json
# Repeat with max_time=240,360,450,600. The profile supplies all other settings.
simc dr-mid2-adapted.simc input=baseline-apl.simc json=reference-baseline.json
simc dr-mid2-adapted.simc input=candidate-apl.simc json=reference-candidate.json
# Repeat the reference with max_time=450.
dr-personal.simc (exact 300s control input, output path removed)
ptr=1
hunter="Veratrot"
level=90
race=vulpera
region=eu
server=burning_legion
role=attack
professions=alchemy=100/inscription=1
spec=marksmanship
omnium_talents=136814:1/136815:1/136817:1/136819:1/136822:1
head=,id=271492,enchant_id=8017,bonus_id=6652/13335/12854/13696/13692/13698/1587,redirected_base_stats=268230
neck=,id=268265,gem_id=240983/240908,bonus_id=6652/13668/13334/13987/12854
shoulder=,id=271490,enchant_id=8001,bonus_id=13335/13694/6652/13697/12851,content_tuning=1040
back=,id=193763,bonus_id=13440/6652/13662/12699/12846,content_tuning=1279
chest=,id=271876,enchant_id=7987,bonus_id=6652/13662/13334/13846/12854
wrist=,id=244584,bonus_id=12214/13667/12497/13751/14001/8960/12384/8791/13836/13696,content_tuning=3615,crafted_stats=40/36,crafting_quality=5
hands=,id=271493,bonus_id=6652/13440/13691/13697/12846,redirected_base_stats=193752
waist=,id=244581,gem_id=240890,bonus_id=12214/13667/13695/12497/13751/14001/8960/12384/8791/13836/13696,content_tuning=3615,crafted_stats=36/32,crafting_quality=5
legs=,id=271491,enchant_id=8159,bonus_id=12846/6652/13440/13693/13698/1574,redirected_base_stats=159375
feet=,id=159388,enchant_id=7963,bonus_id=13440/6652/13662/12699/12846,content_tuning=1279
finger1=,id=251136,enchant_id=7967,gem_id=240908,bonus_id=13440/6652/13668/12699/12846,content_tuning=1279
finger2=,id=158366,enchant_id=7967,gem_id=240908,bonus_id=13440/6652/13668/12699/12854
trinket1=,id=270168,bonus_id=6652/13334/12854
trinket2=,id=270175,bonus_id=6652/13334/12854
main_hand=,id=268207,enchant_id=8689,bonus_id=6652/13334/13708/12854
temporary_enchant=
midnight.crucible_of_erratic_energies_violence=1
midnight.crucible_of_erratic_energies_sustenance=1
midnight.crucible_of_erratic_energies_predation=1
dragonflight.ruby_whelp_shell_training=
calculate_scale_factors=0
scale_only=strength,intellect,agility,crit,mastery,vers,haste,weapon_dps,weapon_offhand_dps
override.bloodlust=1
override.arcane_intellect=1
override.power_word_fortitude=1
override.battle_shout=1
override.mystic_touch=1
override.chaos_brand=1
override.skyfury=1
override.mark_of_the_wild=1
override.hunters_mark=1
override.bleeding=1
talents=C4PAD57yiELKEty14ekTDtZEqYzsMwAGwMsFYWAAAAAAAAAzYGzssNjZmxM4BMNjBjtlZmZmZmZmBzsMYGAAwYmZMzMDAGGgNmZbGD

fight_style=Patchwerk
desired_targets=1
max_time=300
vary_combat_length=0.2
max_prio_damage=1
fixed_time=1
single_actor_batch=1
optimize_expressions=1
threads=1
iterations=20000
target_error=0
seed=2026101202
report_details=1
dr-mid2-adapted.simc (exact 300s control input, output path removed)
ptr=1
hunter="MID2_Hunter_Marksmanship"
source=default
spec=marksmanship
level=90
race=dwarf
role=attack
position=ranged_back
talents=C4PAD57yiELKEty14ekTDtZEqYzsMwAGwMsFYWAAAAAAAAAzYGzssNjZmxM4BMNjBjtlZmZmZmZmBzsMYGAAwYmZMzMDAGGgNmZbGD
omnium_talents=136822:1/136819:1/136817:1/136818:1/136814:1
potion=potion_of_recklessness_2
flask=flask_of_the_shattered_sun_2
food=silvermoon_parade
augmentation=void_touched
temporary_enchant=main_hand:thalassian_phoenix_oil_2
head=skulking_vipers_weeping_fangs,id=271492,bonus_id=1808/13662,ilevel=334,gem_id=240967,enchant_id=7961,redirected_base_stats=268230
neck=aqirbane_reliquary,id=268265,bonus_id=13668/13708,ilevel=344,gem_id=240914/240898
shoulders=jaws_of_the_skulking_viper,id=271490,bonus_id=13662,ilevel=344,redirected_base_stats=268231
back=silken_voodoo_drape,id=268253,ilevel=344
chest=skulking_vipers_scuteplate,id=271495,bonus_id=13662/13708,ilevel=344,enchant_id=7987,redirected_base_stats=271876
wrists=farstriders_plated_bracers,id=244584,bonus_id=1808/8960/12214/12384/13751/13836/9627,ilevel=331,gem_id=240890,crafted_stats=32/49
hands=skulking_vipers_hidepiercers,id=271493,bonus_id=13662,ilevel=334,redirected_base_stats=193752
waist=farstriders_trophy_belt,id=244581,bonus_id=1808/8960/12214/12384/13751/13836/9627,ilevel=331,gem_id=240908,crafted_stats=32/49
legs=skulking_vipers_coiled_legwraps,id=271491,bonus_id=13662,ilevel=344,enchant_id=8159,redirected_base_stats=268237
feet=ferocious_scaleboots,id=268233,ilevel=334
finger1=signet_of_snarling_servitude,id=251136,bonus_id=13668,ilevel=334,gem_id=240908,enchant_id=7967
finger2=vile_alchemists_band,id=268249,bonus_id=13668,ilevel=334,gem_id=240908,enchant_id=7967
trinket1=voracious_heart_of_ulatek,id=270175,ilevel=344
trinket2=zuljins_guillotine_technique,id=270173,ilevel=344
main_hand=caustic_repose_greatbow,id=268207,bonus_id=13708,ilevel=344,enchant_id=8041

fight_style=Patchwerk
desired_targets=1
max_time=300
vary_combat_length=0.2
max_prio_damage=1
fixed_time=1
single_actor_batch=1
optimize_expressions=1
threads=1
iterations=20000
target_error=0
seed=20261231
report_details=1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant