Knowing A and B are useful for figuring out cRatio, and thus figuring out things like mob attack, but you're right, it's insufficient to really tell how average damage is related to cRatio.
However I don't think your:
U=rand(0..1):V=rand(a..b):W=rand(0..1)
If U<0.30 then d=DMG*w
else d=V*w
sufficiently describes the process. When you're right on the edge of creating a spike (eg: cRatio at about 1.5), the average spike frequency is about 3x the average non-spike frequency. When you're near 1.0, with the spike right in the middle, the average spike frequency is about 5x the average non-spike frequency.
Just a rough review from Masa's data..
What I'm looking at:
Find the average frequency of all values aside from the 1.0 spike and any tail ends (artifacts of the 1.05 randomizer).
Subtract that average frequency from the frequency values of the spike values.
Sum up the remaining spike values.
Compare that sum with the grand total of all damage value frequencies to see what percentage of all generated damage values are encompassed in the artificial spike.
What I found:
Below 1.0 cRatio, down to ~0.8 (where max damage was still above 1.0), ~35% of all values came from the spike pool.
As cRatio dropped towards 0.75 (where max damage was capped at 1.0), the pool size dropped to about 25% of all values.
Not enough data (in this spreadsheet) below 0.75 to see how the trend continued.
Above 1.0 cRatio the pool size fluctuated from ~30% to ~37%. Either 33% or 35% would be believable.
As cRatio increases above 1.25, such that the min damage hits and sticks to 1.0, the percentage of the overall damage frequencies that are made up by the spike pool drop in a fairly linear fashion, reaching 12% at 1.4 cRatio.
As such you can't simply say that 30% (or whatever) of the time you generate a spike value, and the rest of the time you generate a value in the min::max range.
One might posit, then, that the chance of generating a frequency spike value is dependant on the total min:max range available.
Formulation:
(max - min)/baseDamage + fraction of total values in the spike
where max and min are corrected to generally exclude the 1.05 spread tails.
That formulation consistantly resulted in a final value of just about 0.9 (with rounding, between 0.89 and 0.91).
So, your threshhold for U would be: 1 - ((max - min)/baseDamage) - 10%
Not sure why there would be the extra -10% there, but could probably be explained based on expectations for the min::max range compared to base damage.
And this finally creates a formula that I'm comfortable with in terms of how the spike is generated. Still needs more work to calculate an average damage value based only on cRatio, though, and you can't completely ignore the min and max values (the a and b you mention in your post).

Reply With Quote