Our understanding of player pDIF has improved while our understanding of monster pDIF has remained relatively obscure. We do know a few things (like their pDIF cap) and I will show a few more in this post. First, though, I'd like to state my largest assumptions:
1) Monster pDIF = Avatar pDIF = Pet pDIF (potentially with the exception of the ranged Automaton) - I have seen no evidence to dispute this and they share some common features.
2) Monsters use similar equations to players. (fSTR, pDIF, cRatio, etc.) - Same as above. It seems reasonable and I see no reason to doubt it. Thus I will focus on determining these relationships.
fSTR
I figured that fSTR would be a good one to start with because we can use well known features of the pDIF curve (the 1.0 frequency spike) to determine base damage at any given STR.
Previous Work
Much of the original Avatar work (at least on the NA side) was done by Kegsay on Alla. Here is a link to his blog. Now, notable among his conclusions are that Avatar base damage increases every 4 STR even against level -1 monsters outside cities. Furthermore, there are STR values where he finds that Avatars seem to have variable fSTR. Looking back at his data, it becomes apparent that Avatar fSTR is simply uncapped and he's attacking a population that we normally assume to be homogenous (L-1 monsters) but not recognizing that they're actually not (slightly different VIT values). Given the relative lack of Avatar STR sources at the time, it's impressive that he did this. I wouldn't have even considered the test.
I decided to continue this by going to Abyssea and manipulating Avatar STR using Atma and target VIT with debuffs (like Choke/Wild Oats).
Test 1, Abyssea vs. EM Bluffalo (118 VIT) with celestial avatars (Garuda and Ramuh)
<table border="0" cellpadding="0" cellspacing="0" width="384"><colgroup><col style="width:48pt" span="6" width="64"> </colgroup><tbody><tr style="height:15.0pt" height="20"> <td class="xl65" style="height:15.0pt;width:48pt" height="20" width="64">STR Boost</td> <td class="xl65" style="width:48pt" width="64">D</td> <td class="xl65" style="width:48pt" width="64">dSTR</td> <td class="xl65" style="width:48pt" width="64">fSTR</td> <td class="xl65" style="width:48pt" width="64">Same?</td> <td class="xl65" style="width:48pt" width="64">Prediction</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">0</td> <td align="right">47</td> <td align="right">-10</td> <td align="right">0</td> <td>Yes</td> <td align="right">47</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">9</td> <td align="right">48</td> <td align="right">-1</td> <td align="right">1</td> <td>Yes</td> <td align="right">48</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">10</td> <td align="right">49</td> <td align="right">0</td> <td align="right">2</td> <td>Yes</td> <td align="right">49</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">11</td> <td align="right">49</td> <td align="right">1</td> <td align="right">2</td> <td>Yes</td> <td align="right">49</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">20</td> <td align="right">51</td> <td align="right">10</td> <td align="right">4</td> <td>Yes</td> <td align="right">51</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">30</td> <td align="right">53</td> <td align="right">20</td> <td align="right">6</td> <td>Yes</td> <td align="right">53</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">40</td> <td align="right">55</td> <td align="right">30</td> <td align="right">8</td> <td>Yes</td> <td align="right">55</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">50</td> <td align="right">58</td> <td align="right">40</td> <td align="right">11</td> <td>Yes</td> <td align="right">58</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">60</td> <td align="right">60</td> <td align="right">50</td> <td align="right">13</td> <td>Yes</td> <td align="right">60</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">70</td> <td align="right">63</td> <td align="right">60</td> <td align="right">16</td> <td>Yes</td> <td align="right">63</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">80</td> <td align="right">65</td> <td align="right">70</td> <td align="right">18</td> <td>Yes</td> <td align="right">65</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">90</td> <td align="right">68</td> <td align="right">80</td> <td align="right">21</td> <td>Yes</td> <td align="right">68</td> </tr> <tr style="height:15.0pt" height="20"> <td style="height:15.0pt" height="20" align="right">100</td> <td align="right">70</td> <td align="right">90</td> <td align="right">23</td> <td>Yes</td> <td align="right">70</td> </tr> </tbody></table>
The above table only matches our known fSTR curve for a D47 weapon used by a 108 STR character, but it matches it perfectly:
Spoiler: show
Anyway, there are any number of potential curves that would fit the points I made, but this is at least enough information to make me comfortable with the idea that Avatars do use player fSTR equations. Also, it gives us a value to use for level 99 Celestial avatar base damage and STR.
pDIF
Avatars do not hit for the same damage every time. Therefore there is at least one randomization function in play, which we might as well call pDIF. Furthermore, there's a secondary randomizer of 1~1.05 damage. Again I'm going to have to cite Kegsay as the previous work, though I know the idea was around on several forums already. What we know:
1) Monster pre-randomizer pDIF caps at 4 (unlike 3 for players) - This was apparent before they added the secondary randomizer after the 2-hander changes. It's also a pattern followed by every type of pet.
2) There is a secondary randomizer of 1~1.05, just like for player melee hits.
3) Critical Hits increase Ratio or pDIF but do not bypass the pDIF cap. - These appear higher on some monsters/pets/avatars due to Critical Attack Bonus II, which many of them seem to possess.
4) Monsters appear to receive a ratio boost when attacking players of lower level than themselves. - This has been proposed as +0.05 Ratio/level difference and we have no reason to reject it.
5) 2 STR = 1 Attack for monsters. - This can be confirmed with the Harle Automaton, but it's also apparent from some tests I've done in Abyssea. +50 Attack gives the same Ratio range as +100 STR.
Recent Work:
Xilk shows that Gorefang Hobs (99) caps pDIF on level 61 Sand Lizards with +0 Attack. He also shows that Gorefang Hobs fails to cap pDIF on level 62 Sand Lizards with almost all of the pet attack in the game (>+100) despite the 6 defense difference between the two lizards.
This indicates that the actual attack/defense comparison is irrelevant in this case. Gorefang Hobs appears to be capping due to the Ratio bonus from level correction alone. It's a 38 level gap so we'd estimate it as +1.9, but we don't really know because we don't have any mapping between Ratio and pDIF.
This also clarifies why Kegsay could not detect attack bonuses from equipment in his tests despite later work showing an effect. He was capping purely because he was fighting Bees that were 38+ levels below him. That's why his only uncapped pDIF samples are when he uses Avatar's Favor, which gives a Ratio penalty that is applied at some point but perhaps isn't involved in either the cap.
Overall, I'd propose:
: Avatar cRatio = (Avatar Attack/Target Defense) + Level Correction (positive) - Penalties
* (Avatar Attack/Target Defense) probably has a cap of 2 given the recent statements by SE.
* Level Correction (positive) seems to cap at 38 levels different.
* Penalties could be uniquely applied, or it could be folded into another term. Given the testing that has been done, it is not possible to say.
Future:
The next (and most laborious step) is going to be to determine the pDIF curves for monsters. This is probably easiest done with Automatons because you can actually see their Attack. My preliminary tests using Avatars against Level 0 Bluffalo seem to indicate that the Monster pDIF function is fundamentally different from player pDIF functions. Mapping from one to the other just doesn't work, and monsters have higher variability than we would expect at every point.