Elitist Jerks
Register
Blogs
Urban Rivals
Forums
New Posts


Go Back   Elitist Jerks > Public Discussion > Class Mechanics
Elitist Jerks Login

gamerDNA Login

Welcome to Elitist Jerks
We're testing some new features on the site regarding OpenID registration and coordination with gamerDNA. If you experience any issues with registering an account, please take the time to fill out a report and send it to this e-mail address. We would appreciate any assistance you could provide in making sure everything is functioning as intended. Thanks!

If this is your first visit, please be sure to check out the FAQ and the forum rules. Users must register to post and new registrations are subject to a one day "mute" period to get acquainted with the community.

Reply
 
LinkBack Thread Tools
Old 02/01/08, 12:57 AM   #26
Dontmindme
King Hippo
 
Dwarf Rogue
 
Icecrown
Yeah, that poison tick issue is problematic.

Some features that will probably cause some non-conformity...
1) 0 stacks doesn't actually tick so we do not have regular ticks here.
2) 1 stack will always tick immediately starting the timer.
3) Subsequent stacks tick based on the time started for the first stack.

On the plus side, you are guaranteed to reach 5 stacks within 60 seconds if it doesn't drop...
Okay, I wanted to add some plus side...
 
User is offline.
Reply With Quote
Old 02/01/08, 1:31 AM   #27
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
So, general updates on modeling:

1) The above program I linked for Mongoose uptime is a little glitchy; it will only give the right answers in the case where the duration divided by the weapon speed is an integer.

2) I have written what should be a better version, updated to do the continuous model of Deadly Poison that we have been discussing. It also computes the formula derived in post 25:

max_atts = 10000000

attsPerSec = 1.12  # p
hitChance = 0.921  
vilePoisonsRanks = 0

bossResistRate = .83
poisonProcRate = .3 + .02 * vilePoisonsRanks

procChance = hitChance * bossResistRate * poisonProcRate # v
speed = 1/attsPerSec

Q = (1-procChance)**(12*attsPerSec)
P = 1-Q

predictedRate = P * (1-P**5) / Q

print 'Predicted Rate: ', predictedRate

procDur = 12

t = 0.0
atts = 0
stacks = 0
stackTime = 0

procStart = -2 * procDur

from random import random

while atts < max_atts:
    
    if t - procStart > procDur:
        stackTime += 12*stacks
        stacks = 0
    
    roll = random()
    if roll < procChance:
        stackTime += (t-procStart) * stacks
        procStart = t

        stacks += 1
        if stacks > 5:
            stacks = 5
                    
    atts += 1                
    t += speed

if stacks != 0:
    stackTime += stacks * (t-procStart)

print 'Simulated Rate: ', stackTime/t
3) So, running this simulator for, for instance, my numbers from the Rogue Gear Sheet, we have:

Predicted Rate: 4.56530114553
Simulated Trial 1: 4.52961508
Simulated Trial 2: 4.529428956
Simulated Trial 3: 4.529428956

So, based on this, it would appear that our formula is slightly (<1%) overestimating the poison uptime.
Running it with the same base stats but 4/5 Vile Poison:

Predicted Rate: 4.85301162111
Simulated Trial 1: 4.83704251998
Simulated Trial 2: 4.83682763598
Simulated Trial 3: 4.83754235598

And, dropping my gear to T5 level (which changes the constants to v = 1.01 , p=.903 * .83 * .3 = .225), we have:
Predicted Rate: 4.35561811564
Simulated Trial 1: 4.341729988
Simulated Trial 2: 4.340586444
Simulated Trial 3: 4.34504706

So we're decidedly close, but for reasons that are not totally clear to me we're off by about half a percent. Any ideas?

Edit: I figured out the problem. The derivation we did was for the randomized case where the notion of having, say, 12.2 attacks between procs makes sense; however, in the OH case - which is what we have modeled with that program - since the attacks stay in sync, you never have other than 12 attacks (whereas in the random case you'll sometimes have 12 and sometimes 13, so it averages out to 12). So for purposes of computing refreshes, we should be using q^floor(12v) rather than q^{12v} - though in the downtime calculation, q^{12v} is still correct... which effects the ability of stuff to cancel out. So the formula will need to be recomputed to account for this to work in the periodic case. For MH poison the model is fine.

Of course, one could argue that in the real world, there's enough variance in the length of supposedly constant durations and swing times that you lose the synchronization effect. Additionally, there are haste procs and stuff the muddy this up. So it might just be better to use the existing formula regardless, and update the program to simulate this better.

Last edited by Aldriana : 02/01/08 at 1:54 AM.
 
User is offline.
Reply With Quote
Old 02/01/08, 10:07 AM   #28
Left
Don Flamenco
 
Left's Avatar
 
Draenei Paladin
 
Darkspear
Nitpicking: your program should have ranks in Improved Poisons rather than Vile Poisons. Also, if you feel like doing it, you can model Master Poisoner ranks in order to reduce the boss resist rate by 5%/10%. (This is only going to apply to Mutilate rogues, but may still be of interest.)
 
User is offline.
Reply With Quote
Old 02/01/08, 10:53 AM   #29
Left
Don Flamenco
 
Left's Avatar
 
Draenei Paladin
 
Darkspear
Meh, I screwed my simulator up

Anyone who wants to continue working with DP models in code should work off of Aldriana's program above in post 27, not my Java program. I was running my Java program with the same numbers that Aldriana uses above, but I was getting higher average stacks (4.65 instead of 4.53). I was puzzled by this, so I looked into my Java model some more and found a flaw with it:

The Java model computes DP uptime in increments of weapon swings, which means that every time there is a swing with DP active it adds the swing's time to DP uptime. This means that the last swing in a DP stretch (the swing before DP runs out) is counted fully towards DP uptime, but in reality DP drops somewhere after that swing occurs but before the next swing. This means that (a) the calculation is only as granular as the swing speed, and (b) the model always overestimates. A swing-based model for uptime is fine for effects that only matter (roughly) for the swings themselves, such as Mongoose, but the DP damage is not connected directly to swings so this isn't a good way to model it.

Aldriana's model is better, as it tracks the uptime separately from the swings themselves, and therefore accurately. In other words, don't use mine; use Aldriana's.

(Incidentally, we should probably fix the Mongoose Proc Simulator to have the same sort of behavior. It might be slightly more accurate, given that Mongoose is going to affect the other hand's swings and special attacks as well as itself.)

Last edited by Left : 02/01/08 at 10:53 AM. Reason: Fixed
 
User is offline.
Reply With Quote
Old 02/01/08, 2:38 PM   #30
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
Okay, I updated my program a bit more, changing some variable names to make it more clear what's going on, as well as some comments to help people follow what's going on. It also now computes the expected value for both the "randomly spaced" attacks case and the "attacks are perfectly periodic" case (which is what the program models). I think "randomly spaced" is probably a better estimate for real-world situations, but to verify that the model is sound I'm including the periodic estimate as well so we can compare it to the numbers the simulation generated.

On the whole, it's much closer, though it's still off by perhaps a tenth of a percent. Given that we're not talking deviations on the order of .02 DPS, I'm not sure we care. So I think we can call this model officially good for now, and turn our attention to the real situation where poison comes in ticks.

# Number of attacks in simulation.  More attacks gives more accuracy but takes longer.
max_atts = 10000000

# Set these constants to be consistant with your gear/spec.
attsPerSec = 1.12  # p
hitChance = 0.921  
impPoisonsRanks = 0
masterPoisonerRanks = 0

############################################################
# You should not need to change anything below this line,
# unless you want to alter the fundamental mechanics of this
# program.
############################################################

# Convert talents to actual numbers
bossResistRate = .83 + .05 * masterPoisonerRanks
poisonProcRate = .3 + .02 * impPoisonsRanks

# Compute the chance that poison will be applied on a given attack.
procChance = hitChance * bossResistRate * poisonProcRate # v

# Compute the time between attacks.
speed = 1/attsPerSec

# Compute the theoretical value for both the "periodic attacks" and
# "randomly spaced attacks" situation.  "Randomized" is more appropriate
# to real-world situations; however, the nature of this simulation is 
# such that "periodic" will generally match the simulated results better.
Q = (1-procChance)**(12*attsPerSec)
P = 1-Q

Qprime = (1-procChance)**(int(12*attsPerSec))
Pprime = 1-Qprime

periodicPredictedRate = P * (1-Pprime**5) / Qprime
randomizedPredictedRate = P * (1-P**5) / Q

print 'Predicted Rate (Randomized): ', randomizedPredictedRate
print 'Predicted Rate (Periodic):   ', periodicPredictedRate

# Initialize our bookkeeping variables.
t = 0.0
atts = 0
stacks = 0
stackTime = 0
lastproc = 0

from random import random

# Note that we very much want to use xrange rather than range here
# so as not to try to generate a million-entry list in memory.

for atts in xrange(max_atts):
    # If it has been more than 12 seconds since poison last procced
    # it has ticked off.  Add the number of second-stacks of poison uptime
    # to the total, and reset stacks to zero.
    if t - lastproc > 12:
        stackTime += 12*stacks
        stacks = 0
    
    # Generate a random number to see if poison procs.
    roll = random()
    
    # If poison procs, add the poison uptime in second-stacks to the 
    # total, and update the time of the last proc.
    if roll < procChance:
        stackTime += (t-lastproc) * stacks
        lastproc = t

        stacks += 1
        if stacks > 5:
            stacks = 5

    # Update the time for the next pass through the loop.
    t += speed

# If poison is still ticking at the end, we have not yet counted it's uptime.
# We do so here.
if stacks != 0:
    stackTime += stacks * (t-lastproc)

# Print the simulated poison uptime.
print 'Simulated Rate:              ', stackTime/t
 
User is offline.
Reply With Quote
Old 02/01/08, 3:51 PM   #31
Left
Don Flamenco
 
Left's Avatar
 
Draenei Paladin
 
Darkspear
Nice; I like it.

While you were working on that, I came up with a program to simulate the tick-based case. It is based on the Python program you posted previously. It took a little thinking to figure out how to construct the flow of the while loop, but I think I have something that will work.

Before posting it, I added some comments as well as shamelessy ripped off your commenting style and your big block of "don't move stuff below this line."

EDIT: I have updated this program to also output a simulated DPS number, which helps with direct comparisons between Improved Poisons and Vile Poisons

print "DP Modeling, tick-based model"
# Longer times result in better estimates, but take longer to model
maxTime = 100*24*60*60 # 100 days of steady DPS

# Weapon info
speed = 1.5/1.3 # weapon speed (remember to account for SND/Haste)
missChance = (6 + 3.1)/100 # miss + dodge (+ parry)

# Poison talents
impPoisonsRanks = 2
masterPoisonerRanks = 0
vilePoisonsRanks = 3

# Deadly poison rank 7 -> 180 over 12 seconds
dpDamage = 180

############################################################
# You should not need to change anything below this line,
# unless you want to alter the fundamental mechanics of this
# program.
############################################################

# Compute some basic calculated values
attsPerSec = 1/speed # p
hitChance = 1 - missChance
bossResistRate = 0.17 - 0.05 * masterPoisonerRanks
poisonProcRate = 0.3 + 0.02 * impPoisonsRanks

# Compute the chance for DP to proc on any given attack
procChance = hitChance * (1 - bossResistRate) * poisonProcRate # v

# This is Aldriana's prediction equations for uniform/periodic attacks
Q = (1-procChance)**(12*attsPerSec)
P = 1-Q

predictedRate = P * (1-P**5) / Q
print 'Predicted Rate: ', predictedRate

# Define the duration of a DP proc
procDur = 12

# Define variables for tracking our simulation
t = 0.0
stacks = 0
ticks = 0

procStart = -2 * procDur
nextTick = 0.0
nextAtk = speed

from random import random

# Assumption: attack speed is less than 3.0 (valid for all rogue weapons)
while t < maxTime:
    # If the next tick would occur after the duration from the last
    # DP proc has run out, then the stack falls off. Set stacks to 0.
    if procStart + procDur < nextTick:
        stacks = 0 

    # If the next tick is recorded as earlier than the current time,
    # then DP ticked since the last attack occurred. Update our total ticks
    # counter and compute when the next tick will occur.
    if nextTick < t:
        ticks += stacks
        nextTick += 3
    
    # Now, resolve the current attack.
    roll = random()
    if roll < procChance: # Determines if DP procced
        procStart = t
        # This if statement determines type of tick modeling. Comment
        # if you want to assume a global tick. Uncomment if you want to
        # assume ticks are tied to when the first proc lands.
#        if stacks == 0:
#            nextTick = t + 3
        stacks += 1
        if stacks > 5:
            stacks = 5
                
    t += speed

# This section allows the DP stack to tick out at the end
while nextTick < procStart + procDur:
    ticks += stacks
    t = nextTick
    nextTick += 3

# 4 ticks over 12 sec = 1 stack of DP
# 20 ticks over 12 sec = 5 stacks of DP
# Compute average stacks by relating ticks to stacks
print 'Simulated Rate: ', (ticks*3)/t
print 'Simulated DPS:  ', ((ticks*3)/t)*(dpDamage/12)*(1+0.04*vilePoisonsRanks)

print 'End of Simulation'
Two Notes
1. There is actually a significant difference between the case where I assume DP is tied to a "global" tick and the case where I assume DP ticks are reset to the very first proc of a DP stack. To see the difference, uncomment the lines under where it says "This if statement determines type of tick modeling...". My thoery is that when a global tick model isn't used, DP stacks get "pushed back" slightly every time one drops, yielding lower damage output. It's smaller than the difference noted in (2), but still there.
2. The results of a tick-based simulation are lower than those for a continuous debuff simulation by quite a bit. I'm not sure why this is, but it's worth looking into.

Here are the results I got using the sample values you see that I posted in the program:
Predicted Result:
4.03389368032

Continuous Model
Iteration 1: 3.9729330599
Iteration 2: 3.9745324599
Iteration 3: 3.9738915999

Tick-based Model, Global Tick:
Iteration 1: 3.88970698274
Iteration 2: 3.89178996813
Iteration 3: 3.88904378853

Tick-based Model, Attack-tied Tick:
Iteration 1: 3.87891869373
Iteration 2: 3.87936293617
Iteration 3: 3.87503817739

Last edited by Left : 02/22/08 at 2:03 PM.
 
User is offline.
Reply With Quote
Old 02/03/08, 7:06 PM   #32
Ekto
Crafting Glaives of Badgeinoth
 
Ekto's Avatar
 
Night Elf Rogue
 
Proudmoore
Originally Posted by Aldriana View Post
Although, realistically, what you probably do numerically rather than solving for the eigenvalues, etc. is just directly compute T^n for T=1, 2, 3, ... 100 (or however long it takes for your answer to converge) and report that, bypassing the whole "symbolic" thing entirely.

I think this is getting down to the realm of where I might actually try to write a program to do it; 100 7x7 matrix multiplications is really not that bad, and could probably be done a couple hundred times to get all the partials you need without too unreasonable a performance overhead.
Well, what you've done here and in post #12 is set up a Markov Chain, with 17 possible states and transition matrix T (although the T used in the post I quoted is a simplified version for the brute-force method). Now the MC is clearly irreducible and aperiodic. If it has a stationary distribution, then all initial distributions (which we are taking to be the vector [0,1,0,...] since our initial state is 1 poison, with 4 ticks remaining) converge to that stationary distribution. Since the MC has a finite state space, it has a unique stationary distribution.

Isn't that stationary distribution what we are interested in? Because its entries would then give us the overall probability that we spend in each state. But since no fight has an infinite number of offhand attacks, it's not completely accurate. But assuming that T^n converges sufficiently fast, then it's a good approximation and a hell of a lot easier than calculating T^n in closed form.

edit: The only problem I see right now with setting it up as a Markov Chain is determining what time should be in this case. For instance, if X0 is the initial state of 1 poison, 4 ticks remaining, what should X1 be? Is X1 the state after 3 seconds (i.e., one tick interval) or the state after 1 attempted offhand attack? If we want the stationary distribution to give us overall probabilities we spend in each state, the first interpretation seems more appropriate (or perhaps X1 is the state after 1 second, X2 after 2 seconds, etc.)

Seems like the problem is much better set up as a MC; it's just a matter of getting the matrix correctly modeled.

Last edited by Ekto : 02/03/08 at 7:23 PM.
 
User is offline.
Reply With Quote
Old 02/03/08, 7:20 PM   #33
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
No, actually. The stationary distribution is just [1,0,0,...], since everything else transitions there and nothing transitions out. We know it's going there; what we care about if how fast it gets there.

See, the key is: we're not actually modeling the full poison system with this - nor can we, because time inside poisons needs to be quantized to 3-second ticks, and time outside poisons can't be. So what this is modeling is the time and stacks of a poison starting at [0,1,0,0,...] and lasting until it ticks off. So the steady state is... well, the poison has ticked off. But we actually do need to know the expected time - and most of the internal state - it took to get there, in order to compute the expected uptime and average stacks, which we can then combine with the downtime calculation (which is easy) to get overall uptime. But I don't really see a way to shortcut doing the full computation, given what we need to know.
 
User is offline.
Reply With Quote
Old 02/03/08, 7:35 PM   #34
Ekto
Crafting Glaives of Badgeinoth
 
Ekto's Avatar
 
Night Elf Rogue
 
Proudmoore
Originally Posted by Aldriana View Post
No, actually. The stationary distribution is just [1,0,0,...], since everything else transitions there and nothing transitions out. We know it's going there; what we care about if how fast it gets there.

See, the key is: we're not actually modeling the full poison system with this - nor can we, because time inside poisons needs to be quantized to 3-second ticks, and time outside poisons can't be. So what this is modeling is the time and stacks of a poison starting at [0,1,0,0,...] and lasting until it ticks off. So the steady state is... well, the poison has ticked off. But we actually do need to know the expected time - and most of the internal state - it took to get there, in order to compute the expected uptime and average stacks, which we can then combine with the downtime calculation (which is easy) to get overall uptime. But I don't really see a way to shortcut doing the full computation, given what we need to know.
Well, how we've set up the matrix T, we haven't taken into account the fact that the poisons drop off when the mob dies and that no matter the initial distribution, it will end at [1,0,...]. The matrix T just tells us how our state moves while we are hitting the mob, and so the stationary distribution can't be [1,0,...], for that would imply that we spend 100% of our time in state (0,0), which is clearly not true, or that the state (0,0) is absorbing, which it isn't (if poisons ever drop off, it is possible for them to be reapplied - we aren't taking into account that the mob dies).

I'll make a post later about what I mean more clearly then, with all the elements of the MC spelled out explicitly. It'll just take some time to work it out and make it look nice in this typeface.
 
User is offline.
Reply With Quote
Old 02/03/08, 7:57 PM   #35
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
That's my point, though: you might be able to define a Markov chain of the entire state (although I'm not at all convinced, due to the need to quantize part of it to ticks and part of it not.) But that's not the Markov chain I defined. For purposes of the transition matrix I stated, (0,0) *is* absorbing, as as T->infty, the average time in the state (0,0) does go to 100%. This transition matrix doesn't handle reapplications; it's only looking at what happens from when poison is applies to when it drops the first time. It doesn't worry about successive reapplications after that, because the approach fundamentally doesn't work for that sort of thing.

I understand what you're saying, and had we defined our transition matrix differently we could use the approach you describe. But that's *not* how the transition matrix is defined. We're just using this to model one uptime period, not the whole system, so I don't see how a reduction of the form you describe could apply.
 
User is offline.
Reply With Quote
Old 02/03/08, 8:14 PM   #36
Ekto
Crafting Glaives of Badgeinoth
 
Ekto's Avatar
 
Night Elf Rogue
 
Proudmoore
Originally Posted by Aldriana View Post
That's my point, though: you might be able to define a Markov chain of the entire state (although I'm not at all convinced, due to the need to quantize part of it to ticks and part of it not.) But that's not the Markov chain I defined. For purposes of the transition matrix I stated, (0,0) *is* absorbing, as as T->infty, the average time in the state (0,0) does go to 100%. This transition matrix doesn't handle reapplications; it's only looking at what happens from when poison is applies to when it drops the first time. It doesn't worry about successive reapplications after that, because the approach fundamentally doesn't work for that sort of thing.

I understand what you're saying, and had we defined our transition matrix differently we could use the approach you describe. But that's *not* how the transition matrix is defined. We're just using this to model one uptime period, not the whole system, so I don't see how a reduction of the form you describe could apply.
Ah ok much clearer then. I misunderstood some part of your original post and thought you were attempting to model all of the poison stacks, including the possibility of reapplication.

Edit: Why is the MC you defined, however, a simplified case? If you can, in principle figure out the probability of going from (1,4) to any of its accessible states, for instance, there's no difference in figuring out the probability of going from (0,0) to its accessible states. The MC I described is irreducible, aperiodic, and has a finite state space, but the one you described isn't. The former is ostensibly easier to solve because we may apply a limit theorem. I'm not trying to be stubborn if it comes off that way, I just totally misunderstood what you were doing and am now very confused about why we aren't considering reapplications.

Now whether the actual process of applying DP stacks is an MC at all is a different issue, but meh.

Last edited by Ekto : 02/03/08 at 8:34 PM.
 
User is offline.
Reply With Quote
Old 02/04/08, 9:15 PM   #37
Dontmindme
King Hippo
 
Dwarf Rogue
 
Icecrown
I haven't forgotten about this discussion, just needed to focus more on the spreadsheet. Given a few comments, I thought it a good idea to brush up on DP mechanics (and Wound poison since I still had it on from PvP) by going to Blasted Lands and seeing how the proc actually works. I'm still going through the combat log (just a quick 5 minute test) but there are a few observations I thought worth sharing as these probably affect modeling.

I actually got a crit on a Wound poison. Presumably against boss mobs this chance is probably 0, but I hadn't actually seen a poison crit before.

I watched the debuff drop a few times based on someone's observation that they have seen it just drop early. When I let 1 stack drop a few times, it always ran to completion, but I noticed that 2 or more stacks seemed to always cut short. It looks like the drop timer is somehow related to the time of the first application, so once you get past the opening DP proc, you look to actually get less than 12 seconds before it drops. I'll see if I can figure anything out from the combat log but the story of a 10.5 second poison application drop at 4 stacks seems to be true.
 
User is offline.
Reply With Quote
Old 02/04/08, 9:25 PM   #38
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
My impression is that Instant, Anaesthetic, and Wound Poison can all crit, and use your spell crit% chance to do so; however, since we don't itemize for spell crit, the only crit we have is from intelligence; thus the crit rate for poisons is typically something under 1% - which would mean it *could* happen on bosses, it just doesn't happen very often.

Regarding DP: my understanding of the mechanic is as follows:
1) When poison is first applied, a debuff is applied.
2) Poison ticks occur 3, 6, 9, 12, 15, ... seconds after the debuff is initially applied.
3) Refreshes mean you get 4 ticks after the refresh.

So, for instance, if you initially apply at t = 0, your ticks are at 3, 6, 9, and 12. If you then get a refresh anywhere between, say, t=3 and t=6, you have the next ticks as usual at 6, 9, and 12, with an additional tick at 15 so the refresh gets the full 4 ticks. Regardless of whether the refresh is at 3.1 or 8.9 seconds, you only get the one additional tick, and it occurs at 15 seconds; if you don't get another refresh, poison will drop at that point, even if it has only been 9.1 seconds since last refresh.

Because of this, I think one needs to quantize time into ticks to compute the duration of a given stack of poison; that is, you need to look at the probability of refresh during each 3 second interval between ticks. However, once poison drops, this quantization disappears and one can again consider continuous time. This is the challenge of modeling the "real" DP scenario: part of the time you must quantize time, and the rest of the time you can't. Thus, a direct Markov chain approach won't work; I believe that it is necessary to look at uptime and downtime separately.
 
User is offline.
Reply With Quote
Old 02/04/08, 9:35 PM   #39
 Vulajin
Now with 100%* less failure.
 
Vulajin's Avatar
 
Troll Rogue
 
Mal'Ganis
Regarding poisons critting, as far as I understand rogues get 0% base spell crit chance and 0% crit from Intellect (I reference the tooltips for this, which could certainly be wrong). So it's possible for your poisons to crit, but only if you have a Moonkin or Elemental Shaman in the group (I reference personal experience for this, I can't recall ever critting IP or WP without one of those things in my group).
 
User is online.
Reply With Quote
Old 02/04/08, 9:41 PM   #40
 Shaker
AUGH CHAMPION TIME
 
Shaker's Avatar
 
Night Elf Rogue
 
Elune
Yeah, Vulajin's got it precisely correct. Used to be funny to see poisons crit when you had the Onyxia head buff.

(Guess we could test this with moonkin leather . . . )

Consistency. It's only a virtue if you're not a screwup.
 
User is online.
Reply With Quote
Old 02/04/08, 9:49 PM   #41
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
Wierd, I could've sworn I've seen IP proc without either of those. But I'll have a hard time proving it since I haven't had occasion to use IP in a raid setting in... about 6 months now.

Easiest way to test would presumably be to just farm against level 70+ mobs with Instant Poison (and maybe Arcane Intellect) on; if you go a couple hundred procs without a crit (which, admittedly, will take an hour or so to test) that would confirm this theory.
 
User is offline.
Reply With Quote
Old 02/04/08, 10:52 PM   #42
Dontmindme
King Hippo
 
Dwarf Rogue
 
Icecrown
Well, my Wound Poison crit occurred ungrouped and unbuffed but against a level 57 Servant. So there is some adjustment against lower level mobs.

Looking through the combat log, it appears you are once again correct Aldriana. In one cycle I cut short at 2 stacks, I had the 2nd hit at 2.7 seconds in, but the stack ended when it would have from the initial hit with 4 procs of 2 stack damage.

So I think I understand that mechanic now.

I was also not aware that Murder applied to poison damage, but clearly I have a 2% factor added to the damage being a Humanoid. Makes sense, just didn't think of it.

For the Wound poison crit I had 105 damage which seems a strange number. I take it we are talking a 150% crit with some of the old RED strangeness spell damage strangeness with regards to Murder multiplied in there, although I can't come up with exactly how it gets to 105 exactly.
 
User is offline.
Reply With Quote
Old 02/04/08, 11:09 PM   #43
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
I suspect this is the infamous "Murder double-passes on crits" bug/feature/whatever. 65 * 1.5 (crit) * 1.02 (murder) * 1.02 (murder again) * 1.03 (RED) ~= 105. Now, it's unclear to me why RED effects a spell crit, but... that's the closest thing I have to a theory right now.
 
User is offline.
Reply With Quote
Old 02/05/08, 5:50 AM   #44
Roywyn
Bald Bull
 
Roywyn's Avatar
 
Gnome Mage
 
Argent Dawn (EU)
Originally Posted by Aldriana View Post
Wierd, I could've sworn I've seen IP proc without either of those. But I'll have a hard time proving it since I haven't had occasion to use IP in a raid setting in... about 6 months now.
Improved Judgement of the Crusader (reachable with a 42/11/8 holy paladin build) adds 3% spell/physical crit to the target. It makes Thunder Clap crit, so it'll also make poisons crit. Might be the source.

There is also talk about some crit depression vs. mobs above your level, so an increased crit chance against mob of much lower level might exist as well.


Just some info from the spell side, leaving you back with your poisons now.
 
User is offline.
Reply With Quote
Old 02/05/08, 5:54 PM   #45
 Shaker
AUGH CHAMPION TIME
 
Shaker's Avatar
 
Night Elf Rogue
 
Elune
Originally Posted by Aldriana View Post
I suspect this is the infamous "Murder double-passes on crits" bug/feature/whatever. 65 * 1.5 (crit) * 1.02 (murder) * 1.02 (murder again) * 1.03 (RED) ~= 105. Now, it's unclear to me why RED effects a spell crit, but... that's the closest thing I have to a theory right now.
From a design perspective, making RED affect spell crit wouldn't be a huge issue, due to the fact that it's a near-zero benefit to most of the classes that use it (warrior, hunter, rogue), whereas for the one class that could use it that isn't on that list (ret pallies), without the spell crit it'd be a lot less compelling.

Edit: Just as a note, I may be completely wrong on this, they change which attacks are affected by spell mods vs physical mods far too often for me to keep up with.

Consistency. It's only a virtue if you're not a screwup.
 
User is online.
Reply With Quote
Old 02/05/08, 6:00 PM   #46
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
Well, the thing is, RED used to effect spell crit, and casters were even using it... but then a couple patches back (2.3.0, maybe?) I thought they had changed it to no longer do so, and added the 12 int / 3% spell crit damage gem instead.
 
User is offline.
Reply With Quote
Old 02/05/08, 6:03 PM   #47
Dontmindme
King Hippo
 
Dwarf Rogue
 
Icecrown
Of course that opens up the rather undefined category of spell crit. I think without a solid understanding of the mechanics as it applies to rogues, it's probably easier to just call it 0. Of course, if anyone want to figure it out and quantify it, I'd then have to think seriously about implementing it.
 
User is offline.
Reply With Quote
Old 02/05/08, 6:24 PM   #48
neg^
Von Kaiser
 
Undead Rogue
 
Talnivarr (EU)
If you do the Felwood quest to cleanse flowers and get those that give the 1h buff you'll notice poisons crit alot more. Haven't done it since lvl 60 so I'm not sure if those got nerfed with the Rend/Onyxia buff, but I recall poisons critting noticably more with that flower buff up.
 
User is offline.
Reply With Quote
Old 02/05/08, 10:49 PM   #49
PSGarak
Bald Bull
 
PSGarak's Avatar
 
Undead Warlock
 
Hyjal
Us caster types know for a fact that your spell crit chance is lowered when going against a higher-level target, but we have no idea in what manner it is lowered. If it's, say, -5% then you're basically hosed, even with iJoCr up. If it drops it by a tenth or something then who knows.

You need to be very specific here when you're talking about what actual events you're modeling. The actual Markov Chain event that makes sense to me to model is "the odds that an auto-attack will refresh your poison stack in the 3(?) seconds before it ticks" because it most accurately describes the physical situation, meaning its less prone to artifacts. It's also slightly less tractable to analyzing the time interval. Even three-second transitions can give you an upper bound, whereas an expectation of number of proc transitions times expectation of where a proc occurs in an interval (less than one-half through it) gives a more complicated but more accurate answer. It's the most realistic model I can come up with for straddling the line between event-driven and time-step-driven markov chains with any accuracy, short of dynamic programming.

I'm also not sure why you're so concerned about stack-drop-off time. I think it would be more useful, and easier, to come up with an evolution of the probability distribution of poison stacks as a function of time. What is the exact concern with poison downtime? DoT uptime? Mutilate rotations? If you're just concerned with DoT uptime in terms of whether Shiv is useful, it seems to me more accurate to look at the overall stack probability distribution for 0- and 1-stack starting conditions (and more specifically cumulative difference) directly than by using falling-off-time as an intermediary value for later approximations.

 
User is offline.
Reply With Quote
Old 02/05/08, 11:04 PM   #50
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
So, speaking for myself, the question I'm actually attempting to address is "for the common case where you have Deadly Poison OH as a combat rogue, what is the average number of poison stacks you will keep up on a boss in a sustained fight". There may be other, related questions that we will want to answer, but for starters that's the one I'd like to know.

With this question in mind, you're right that looking at the probability distribution of poison stacks as a function of time is *exactly* what we want. However, the unusual nature of poison refreshes is such that I don't see any way of computing this directly; if you want to have a totally accurate model, you need to deal with event-based probabilities until you get a proc, and then quantize to 3-second ticks thereafter. I don't see any way of modeling this - or even anything particularly close to this - directly.

Hence, the approach that I've been looking at, given that downtime and uptime have different requirements, is to compute them separately - particularly since downtime is trivial to calculate. This is the motivation behind the uptime computation I proposed. But if you have any good ideas how to come up with a good approximation of the answer directly, I'd love to see it - particularly if it doesn't involve computing eigenvalues of a 17x17 matrix. The reason I'm attacking it the way I am is not because I think it's fundamentally a better way to approach things; it's just that I haven't come up with anything better yet.
 
User is offline.
Reply With Quote
Reply

Go Back   Elitist Jerks > Public Discussion > Class Mechanics

Thread Tools

Similar Threads
Thread Thread Starter Forum Replies Last Post
[Rogue] Mutilate Raid DPS Discussion Aereus Class Mechanics 1283 09/19/08 1:20 PM
[Rogue] Hit Mechanics in PVP Fold Player vs. Player 5 05/24/07 12:15 AM
[Rogue] Hit Mechanics in PVP Fold Class Mechanics 0 05/17/07 3:46 PM
Rogue Energy Regen Mechanics Antiarc Public Discussion 9 09/26/06 5:13 PM
Rogue Spec Discussion Apocalypse Public Discussion 8 05/19/06 5:36 AM