Ok i fixed Raellia model in this googlesheet.
Time to compare with parses...
EDIT: on test "218BJ63", normal min/max and crit min generated from model are OK, but crit max=126 while parsed up to 128...
Ok i fixed Raellia model in this googlesheet.
Time to compare with parses...
EDIT: on test "218BJ63", normal min/max and crit min generated from model are OK, but crit max=126 while parsed up to 128...
The difference in the current offsets (751 to 448) is 0.2959, and takes very little to make it almost exactly 0.3. I'm pretty certain that can be treated as the difference in the offsets.
Double-checked the verification tables, and the offset for the lower values of min pDif cannot be less than 448/1024 when using a slope of 153/1024. -447/1024 starts giving values that fail vs observed data. Since the lower half cannot be 444, but the upper half can be 755, will go with the 448&755 combo.
My current thought is that the gap between the lower and upper offsets (ie: the space that would have been filled if the -755/1024 offset was kept the entire way down) is being taken and forced to 1.0. However that doesn't work once you get down below 0.48 cRatio since there's no 1.0 to reset those values to. Need to review the strength of the spike values across all cRatios to get a better idea.
Max pDif slopes are -not- parallel. The upper half (above 1.0) has a slope of about 1.25 (there's some slight uncertainty on the exact value, there), though that reaches cap of +0.375 pretty quickly. The lower half (from your parse data) has a slope multiplier of about 341/1024 (1.333), significantly different.
Test for mob level correction. Not really any better threads to put this in, so here we go.
Target: Abyssea-Uleguerand Bluffalo (already have their defense, so can pick out exact level on lower level job)
Gear:
99 Nin/dnc:
Iga+2///
Iga+2/Iga+2/Shelter/Pagu
Atheling/Thunder/Iga+2/Iga+2
402 def, 83 vit
95 Sam/dnc:
Unkai+2///Thew
Unkai+2/Orcish/Rajas/Pagu
Lamia+1//Unkai+2/Unkai+2
402 def, 80+3 vit
Sam needs to be able to identify lvl 99 bluffalo. They have 516 def, so..
Attack using above gear and Kiku: 515
Add Warwolf: 519
If mob has high defense without Warwolf and neutral defense with Warwolf, it's lvl 99
Additional buffs:
No vit cruor, only HP
Mounted Champion (50 vit)
Vicissitude (30 def)
Sea Daughter
+55 def = 457 def total
Expected attack: somewhere around 417+50 = 467
Should be right around 1.0 cRatio, give or take
Should see general damage spike at 1.0
Damage taken on nin (~30 minutes' worth):
Spoiler: show
1.0 spike at 105 damage, gives us the bluffalo's base weapon damage value after fStr adjustment.
82 min damage is a pDif of ~0.781 to 0.790. Implied cRatio between 1.060 and 1.067, thus an attack between 485 and 487.
Damage taken on sam (~30 minutes' worth):
Spoiler: show
As you can see, minimum damage was 105, the 1.0 spike. That means cRatio needed to be at least 1.25.
Maximum damage seen was 171. Predicted max at 1.26 cratio would be 165~173, depending on secondary spread.
We can thus conclude a high likelihood of cRatio being +0.2 relative to what it was when the mob was EM. Given that sam was 4 levels lower than nin, that would be +0.05 per level.
Final test for existance of 1.0 cRatio floor. Given approximated mob attack of 485-487, want 500+ defense on nin (impractical to get sufficient defense on sam for a solo test with level correction).
Got Protect V, and had Sheltered Ring on so gained +70 def. Final def with atmas: 527
Unfortunately mobs reset, so had to waste some of the time killing them to respawn higher, so total duration isn't as long as other parses.
If there's a 1.0 cRatio floor, cRatio should be 1.0, and minimum damage should be 74.
If there's no 1.0 cRatio floor, cRatio should be around 0.92, and minimum damage should be about 65.
Spoiler: show
And this is rather interesting.
Minimum damage observed: 73 once, and mostly 75+. Conclusion: cRatio is 1.0.
Maximum damage observed: 122. This implies a max primary damage of 117-122, which implies a cRatio of between 0.89 to 0.93.
So the lower pDif range is capped using 1.0 cRatio, while the upper pDif range is not. Maybe.
Followup test on the 1.0 cRatio cap.
Pld/dnc
honor/seignur//
Hero's/Apathy//
Twilight/Creed+2/Solemn/Pagu
Atheling/Warwolf/Creed+2/Creed+2
There's 5% PDT in there, so I expect the 1.0 pDif spike to be 99 damage. (wrong; also need to adjust for vit)
Engaged but facing away, so no shield procs.
Total defense with Protect V with Sheltered Ring bonus + atma: 702
Nominal cRatio: ~0.692
Total vit: 189
Aside:
Total vit for nin & sam tests: 133, so an extra 56 vit, which will change base damage.
+56 vit should be about -14 base damage (d91), unless we hit a cap.
Preliminary view of data seems to be showing the 1.0 cap at 87 damage. Factoring out the PDT, that's 92 base damage (so we have a net -13 fStr).
If damage is based off of nominal cRatio:
Estimated min pDif damage: .358 * 92 = 32 * 95% = 30
Estimated max pDif damage: 1.0 * 92 = 92 * 95% = 87 * 1.05 = 91
If damage is based off of capped 1.0 cRatio:
Estimated min pDif damage: .7125 * 92 = 65 * 95% = 61
Estimated max pDif damage: 1.25 * 92 = 115 * 95% = 109 * 1.05 = 114
Defense 702 (Protect V):
Spoiler: show
Ignoring set procs:
Min: 42
Max: 91
Max damage confirmed as being at 1.0 pDif, which supports the idea that cRatio is *not* capped.
Min damage is significantly higher than expected for the nominal cRatio.
Factoring out the PDT, min damage was 45, which is a pDif between 0.489 and 0.5.
Second assessment:
Changed Creed+2 legs to Staunch Cuisses (to avoid dealing with PDT; really shouldn't have used them in the first test), and Protect V to Protect. Total defense: 644, total vit: 194.
1.0 spike @ 91
Base damage: 91
Nominal cRatio: 0.755
No indications of any damage above 1.0. 92 damage primary value could have generated a 96 dmg max with the secondary modifier, but max observed was 95.
Minimum damage: 48
That's slightly higher than the minimum seen in the prior test (difference range is within acceptable bounds), and still significantly higher than corresponding damage of players against mobs.
This indicates that the cRatio for min damage calculations is moving with expected cRatio, however the calculated value is different than it is for players.
Defense 644 (Protect I):
Spoiler: show
Defense 678 (Protect III):
Spoiler: show
Att: ~486
Def: 527
- cRatio: 0.922
- Min pDif: 0.696 - 0.704
Def: 644
- cRatio: 0.755
- Min pDif: 0.528 - 0.538
Def: 678
- cRatio: 0.717
- Min pDif: 0.506 - 0.516
Def: 702
- cRatio: 0.692
- Min pDif: 0.490 - 0.499
For Defenses 527, 644 and 678, min pDif appears to be about (cRatio - 0.22). Alternatively, for defenses 644, 678 and 702, min pDif appears to be cRatio * 0.71.
Combined, could be cRatio * 0.71, with a max difference of 0.22.
Regardless, cRatio is clearly not capped at a low of 1.0, though the range of possible damage is clearly tightened up compared to the player formulas (and thus we can't use this as a shortcut for figuring out the player pDif formulas).
Does still show that the 1.0 spike still ranges above 1.0 when it's forming the 'upper limit' of damage, which supports the 'set 0.7-1.0 to 1.0 and add 0.3 below 1.0' method.
The mechanics are plainly the same, a 1.0 spike being generated and whatnot, so I'd like to know what data from which you're drawing the conclusion that the range is too narrow. It should be narrowed by that 0.3 anyway, so to what are you comparing to say it's too narrow?
Not to say mobs shouldn't have a different formula from a design standpoint, but lazy coders...
For comparisons, i raise you this:
Test name: 218BJ64
- cRatio: 0.92766
- Min pDif: 0.61111
218BJ65
- cRatio: 0.9045
- Min pDif: 0.5849
218BJ71
- cRatio: 0.8015
- Min pDif: 0.48077
218BJ72
- cRatio: 0.787
- Min pDif: 0.4615
218BJ73
- cRatio: 0.773
- Min pDif: 0.4423
Those tests shows the min pdifs you got should actually be lower... unless i missed something ?
By 'narrow', I mean the difference between cRatio and min pDif (ie: lower range = cRatio - min pDif) is much smaller for the mob data than it is for players. See Masa's samples for a few illustrative points. For players, it's about 0.3 or a bit more; for mobs it's about 0.22 or less. The upper range doesn't seem as affected, but can't be sure; would need to get down to around 0.5 cRatio to see if it drops the max pDif below 1.0 at about the same point as for players.Originally Posted by Raelia
Nope, that was one of the items of note: min pDif for mobs hitting players is significantly higher than min pDif for players hitting mobs.Originally Posted by Masamune
I followed the conclusion, just wondered what data supported it. Just to cover all bases, what's the base damage on the data given by Masa to determine the flooring range? I'd take a stab that it was some multiple of 18 because of the first pDif, but the rest doesn't match.
We'd need >1.5 cRatio mob data to know if it's a difference in equation or just a larger floor/ceiling factor, like just bumping the set-to-1.0 range to a 0.5 width. This would be very visible in a hitcount of Moten's test.
I think the cause of this discrepancy is simply too low sample size Motenten... For example the parse at def678 shows 2 missing values at lower end (while dmg formula should produce each value like the rest of the parse)
Maybe with higher sample size you would have more chance at hitting BOTH primary and secondary randomizers = 0 ? (and then reach same min pdif as for player).
While I don't doubt that there's the possibility of not quite hitting the true extremes, there's no way that that can explain the formula difference here. It would imply an 8-10 point gap where -no- values showed up, and that just isn't believable given the frequencies shown on other values.
And d54 for the level 64 then.
So after flooring the 0.773 cRatio could be anywhere from 23 to 23.999 for a min pDif anywhere between 0.4423 to 0.4615. Extrapolate the mob results to an equal cRatio and you get 0.556, or +0.1 higher. We've chewed on the 0.3 gap width for players plenty, so a 0.4 gap width would be necessary to do the same if base pDif calculation didn't change, so the hitcount of the spike should be huge (>50% of total hits) else we can then suspect a change in base formula.
Pro 3: 163 non-spike to 79 spike, 30% but this may be low enough to be not covering the whole gap width.
Pro 2: 148 non-spike to 91 spike, 38%, suggesting that the whole gap width is definitely not being covered.
So going back up to some earlier data, 105 base damage somewhere around 1.0 cRatio, it's got 61 non-spike to 47 spike, or 43.5%, suggesting either:
A. 0.95 width and 0.4 gap
or
B. 0.7 width and 0.3 gap
to the approximately 0.95 width and 0.3 gap of player data. It's definitely different from player functions in one way or another.
The earlier SAM data gives a ~0.40-0.45 'post-gap' width, so a 0.7 width and 0.3 gap is certainly possible, while the 0.95 width and 0.4 gap would give a wider range and doesn't fit the SAM parse data.
This gives the ~0.1 higher min pDif and suggests heavily that mobs indeed have a different set of basic pDif generation. Per my system RAE and LIA would each be reduced by 0.1 for mobs then.
http://forum.square-enix.com/ffxi/th...l=1#post279423
Ig-Alima is lvl 120 and has 1059 ATK.
I was very surprised to see that Ig'Alima is level 120, I was guessing more like 110 with defense over 800, so perhaps his defense is closer to the 600 area. I'll parse again whenever I next fight him and see if I can get a better estimate using level correction for a 120 mob. Consequently from the ADLs my group has been doing I don't think he is higher than level 100 as my low regular hits are where you'd expect them for a 2.0 cRatio, but I will pay more attention to what my exact attack is when LS does another run tomorrow to try to pinpoint a possible defense max for him.
... if you think you can keep all your stats constant during the whole zerg, then yes the parse might be exploitable... which i doubt.
Same problem for checking its defense: given all the debuffs your ls members will throw at it, and all the buffs it can use on himself, sound near impossible to me to keep its defense constant so you get time to compare with your attack...
Lastly, knowing a mob level is borderline relevant to this thread, while knowing its attack is litterally irrelevant.
You could just do it on the test server.
Equip X defense gear, let him pound on you until you die.
Repeat with X + Y defense gear.
EDIT: or fana at start and just melee him until you wipe. (if you wanted to test mobs defense)
use hundred fists and a bring a friend or two.
a yes maybe on test server, i don't know as i don't haev access, but still need to control each variable used in the test... usually way too much in a zerg.
New data collected from Pchan posted on Official Forum.
He has also another way to modelize frequency behavior of dmg formula, bit debatable imho...
Maybe something in there will help community ?
I accidentally closed the tab on a longer post I was writing, so this will be shorter as it's 3AM and I'm sleepy.
Any progress on this front? Currently we have min/max equations, but that doesn't gives us a clear way to calculate average pDIF, the only relevant quantity.
Here is what I extracted from your Min/Max equations (I don't know if they were written clearly somewhere, and I think I used your updated constants):
Max:
<table cellpadding="0" cellspacing="0" height="74" width="281" border="0"><colgroup><col style="width:48pt" width="64"> <col style="mso-width-source:userset;mso-width-alt:4132;width:85pt" width="113"> </colgroup><tbody><tr style="height:15.0pt" height="20"> <td style="height:15.0pt;width:48pt" height="20" width="64">Zero to 0.5:</td> <td class="xl65" style="width:85pt" width="113">wRatio + .5</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20">0.5 to 0.7</td> <td class="xl65">1</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20">0.7 to 1.2</td> <td class="xl65">wRatio + .3</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20">1.2 to 1.5</td> <td class="xl65">wRatio + wRatio*.25</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20">1.5 to 2.625</td> <td class="xl65">wRatio + 0.375</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20">2.625 to 3.25</td> <td class="xl65">3</td> </tr> </tbody></table>
Min:
<table cellpadding="0" cellspacing="0" height="93" width="318" border="0"><colgroup><col style="width:48pt" span="2" width="64"> </colgroup><tbody><tr style="height:15.0pt" height="20"> <td class="xl65" style="height:15.0pt;width:48pt" height="20" width="64">Zero to 0.38</td> <td class="xl65" style="width:48pt" width="64">0</td> </tr> <tr style="height:15.0pt" height="20"> <td class="xl65" style="height:15.0pt" height="20">0.38 to 1.25</td> <td class="xl65">wRatio*(1+152/1024)-448/1024 </td> </tr> <tr style="height:15.0pt" height="20"> <td class="xl65" style="height:15.0pt" height="20">1.25 to 1.51</td> <td class="xl65">1</td> </tr> <tr style="height:15.0pt" height="20"> <td class="xl65" style="height:15.0pt" height="20">1.51 to 2.44</td> <td class="xl65">wRatio*(1+152/1024)-755/1024</td> </tr> <tr style="height:15.0pt" height="20"> <td class="xl65" style="height:15.0pt" height="20">2.44 to 3.25</td> <td class="xl65">wRatio - 0.375</td> </tr> </tbody></table>
Now! I still think chopping a hole in pDIF is the easiest way to solve our pDIF problem. We already know that they cap it to 3.0 and apply a secondary randomizer, so one more processing step before that isn't really a big deal. The flow would be something like this:
1) Calculate Ratio
2) Calculate cRatio (account for level correction)
3) Calculate wRatio (account for crits)
4) Choose High/Low, randomize it, and calculate qRatio (account for the 1.0 spike)
5) Set the limits at 3.0 and 0.
6) Apply the secondary randomizer.
I don't have MATLAB installed on this computer, but the above should give a function with a maximum of 3, minimum of 0, frequency spike at 1, and the bounds described (assuming my math isn't messed up, which it might be at 3AM).Code:Attack=50; Defense=100; CritRate=0.50; % 50% crit rate dLVL=24; LVLscale = 0.05; % 2H weapon wRatio = Attack/Defense - dLVL*LVLscale + (rand < CritRate); if rand > 0.5 % Up state qRatio = wRatio + rand*( 0.5 + 0.25*(wRatio - 1.2)*(1.2<wratio<1.5) -="" 0.125*(wratio=""> $lt; wRatio $lt; 1.5) + 0.075*(wRatio>1.5) ); if qRatio > 0.5 pDIF = max(qRatio - 0.3,1); end else % Down state qRatio = wRatio + rand*( (wRatio<2.44)*wRatio*152/1024 - 448/1024 + (wRatio>2.44)/16 ) if qRatio > 1.25 pDIF = max(qRatio - 267/1024,1); end end pDIF = min(pDIF,3) pDIF = max(pDIF,0) pDIF = pDIF*(1+rand*0.05)
Did I use the right constants? Did you already make a model for the distribution?
Edit: Trying to do this in excel, the numbers don't quite match up. I have something wrong with the way I correct for the lower range's window.
Edit2: Actually, there might be something wrong with the basic concept. I'm going to have to think about this some more.
</wratio<1.5)>