Wednesday, February 27, 2008

Enough abbreviations to make your mind bleed, Part 3: Becoming Dar Master in the Klingon Empire.

Thank god I have this to work on, because if I didn't I would have to spend this entire blog post about the fact that we got another lame info post about the update. Maddening it is. But I have my little refuge, my opus, my endless babbling and this will be my shelter from the string of completely useless info posts.

We are getting closer and closer to completely understanding the damage formula in FFXI, and if you thought that the last two days were esoteric then today is going to send you for a loop. But before the mind melting begins lets look at what we did yesterday.

cRatio = ATT/DEF - 0.050 x (mobLVL - playerLVL)
This is the equation that you use to factor your attack and the mob's defense into the damage that you do. Now, this would be really simple if we just left it here, but it would also mean that you would always hit for the same amount of damage, and that would be pretty lame. LOL So, we are going to get to another place where we are going to have upper and lower limits of damage. Unlike fSTR and other limiters up until this point that have just dictated that the result of the formula has to be limited within a range, these limits will actually provide the outlying limits for a variable that is inserted into the equation to randomize damage results.

That sounded a little bit dry and technical, to put it more simply: the next thing we are going to look at are the highest damage and lowest damage that you can possibly get. Now, back to the complicated part. Time for more charts! This first one is the way that you determine what the maximum amount of damage you can do. The maximum can change depending on your cRatio (remember, it means your level corrected attack/defense ratio) but for the most part on XP mobs you are going to be in the highest bracket (the 5/6 (.83~).

cRatio RangeFunction Value
0 ≤ cRatio ≤ 0.5fMax(cRatio) = 0.4 + 1.2 x cRatio
0.5 ≤ cRatio ≤ 5/6 (.83~)fMin(cRatio) = 1
5/6 (.83~) ≤ cRatio ≤ 2fMax(cRatio) = 1.2 x cRatio


Now remember this is just the highest possible damage you can get on a normal melee attack. We need another chart to figure out the minimum amount of damage that we can do on one normal melee attack so we can get the range in which any normal melee attack can land.

cRatio RangeFunction Value
0 ≤ cRatio ≤ 1.25fMin(cRatio) = -0.5 + 1.2 x cRatio
1.25 ≤ cRatio ≤ 1.5fMin(cRatio) = 1
1.5 ≤ cRatio ≤ 2fMin(cRatio) = -0.8 + 1.2 x cRatio

Ok, so now we have some pretty sweet looking charts, but what the fuck do they mean, right? Ok, lets start with f~ thingees. fMax(cRatio) and fMin(cRatio) just means that these are the maximum and minimum of the functions that determine your damage, and that means that they are just the neat little notation that we use to say this is the most damage you can do and this is the least damage you can do! Kind of like how cRatio has a maximum amount, when the minimum is determined by the game to be below 0 it will be rounded up to 0. I think this is just so that gimp players would start giving the mob HP with their weak swings. LOL

Now, lets take the cRatio that we got yesterday from the "sexy Samurai slaughters the Greater Colibri" scenario.
cRatio = 422/322 - 0.050 x (81-75) = 1.310 - 0.3 = 1.01
With this information we can stare at those charts I posted above and become even further confused. LOL Since we know that our cRatio is 1.01 we can pick out the fMax(cRatio) and fMin(cRatio) for our scenario. 1.01 falls between 5/6 (.83~) <>fMax(cRatio) = 1.2 x cRatio For the minimum, since 1.01 falls between 0 ≤ cRatio <>fMin(cRatio) = -0.5 + 1.2 x cRatio So, we have a fMax(cRatio) of 1.212 and we have a fMin(cRatio) of .712, and what does that mean? Remember pDIF? Well, pDIF is the number that lands between those two numbers. The fMax(cRatio) and the fMin(cRatio) were the ways that we figured out how high and how low your pDIF can reach. In the end this is what pDIF kind of ends up looking like:
pDIF = (fMax(ATT/DEF - 0.050 x (mobLVL - playerLVL) ~ fMin(ATT/DEF - 0.050 x (monLVL - playerLVL))
The problem is that fMax and fMin use different calculations when the cRatio changes. ; ; That is hard to illustrate in a single equation, but I will deal with that in a little bit.

And thats it. o.o; No, really, thats everything we need to know to put together the entire damage formula. So, lets walk through this one more time. From the beginning we have the physical damage formula:
Damage = Base Damage x pDIF
and since we know the formulas for Base Damage lets go ahead and plug that in there!
Damage = (D + (dSTR + N)/2) x pDIF
Now, notice that I haven't actually had an equation that involves pDIF yet, but actually I have! I haven't tricked you, but I should definitely explain this now. pDIF is actually the representation of all the numbers that can fall between your fMax(cRatio) and your fMin(cRatio) so by finding those two numbers we actually know our pDIF! But knowing that doesn't make completing the equation any easier, in fact it really makes things a much larger pain in the butt. Just before I do that, I am going to change the equation slightly so that it better represents each of the individual stats that we are going to need to get an actual number out of the formula. The formula should look like this now:
Damage = (D + (dSTR + N)/2)/2 x (fMax(ATT/DEF - 0.050 x (mobLVL - playerLVL) ~ fMin(ATT/DEF - 0.050 x (monLVL - playerLVL))
And thats just a nice representation of what happens, but as you already know, the pDIF can change based upon changes in the cRatio, so lets go a bit further and make specific equations for all of the potential cRatio outcomes. This should be fun.

For cRatio between 0 and .5 our equation looks like this:
Damage = (D + (dSTR + N)/2)/2 x (0.4 + 1.2 x (ATT/DEF - 0.050 x (mobLVL - playerLVL) ~ -0.5 + 1.2 x (ATT/DEF - 0.050 x (monLVL - playerLVL))
Between .5 and .83~:
Damage = (D + (dSTR + N)/2)/2 x ((ATT/DEF - 0.050 x (mobLVL - playerLVL) ~ -0.5 + 1.2 x (ATT/DEF - 0.050 x (monLVL - playerLVL))
Between .83~ and 1.25:
Damage = (D + (dSTR + N)/2)/2 x (1.2 x (ATT/DEF - 0.050 x (mobLVL - playerLVL) ~ -0.5 + 1.2 x (ATT/DEF - 0.050 x (monLVL - playerLVL))
Between 1.25 and 1.5:
Damage = (D + (dSTR + N)/2)/2 x (1.2 x (ATT/DEF - 0.050 x (mobLVL - playerLVL) ~ (ATT/DEF - 0.050 x (monLVL - playerLVL))
And finally between 1.5 and 2:
Damage = (D + (dSTR + N)/2)/2 x (1.2 x (ATT/DEF - 0.050 x (mobLVL - playerLVL) ~ -0.8 + 1.2(ATT/DEF - 0.050 x (monLVL - playerLVL))
Now, I know that is a lot, but its actually pretty helpful. We can now see what parts of the equation you can know and what is determined by the random number generator that is built into the game.

I am adding in something new pretty late in the game but hey, its not that complicated. For the Damage equation in the next part I have I just changed dSTR to (STR - VIT), and if that is going to throw you off then you should have given up on Tuesday. The only reason that I did that was because it makes it easier for listing out all of the components of the equation. I also should mention this point that I also corrected something else that really was kind of an error from Tuesday. At one point on Tuesday's entry I listed the equation for fSTR2 incorrectly and I had just left it as fSTR, so I have adjusted that page. This page is accurate. Anyway, like I said this is a learning process for me too, so you have to accept things like that are going to happen.

Anyway, with the small adjustment to the change of dSTR into (STR - VIT) our final formula looks like this:
Damage = (D + ((STR - VIT) + N)/2)/2 x (fMax(ATT/DEF - 0.050 x (mobLVL - playerLVL) ~ fMin(ATT/DEF - 0.050 x (monLVL - playerLVL))
So now lets apply this to a practical situation, how about our sexy Samurai? Indeed! The very first thing that we need to know is the cRatio because that determines which equation we need to use, and since we are going to list that anyway, lets go ahead and list out all of the values that we already know.
  • D = 75 (Hagun's Damage)
  • STR = 98
  • VIT = 67
  • ATT = 422
  • DEF = 322
  • mobLVL = 81
  • playerLVL = 75
Now, from this we can figure out the rest of what we need to know! Lets go for it!
Damage = 75 + ((98 - 67) + 4)/2)/2 x (1.2 x (422/322 - 0.050 x (81 - 75) ~ -0.5 + 1.2 x (422/322 - 0.050 x (81 - 75))

Now since this is a range, and ultimately we are looking for the outliers to find out what our range is, I am going to break this into two equations. First, the high end:
Damage = 75 + ((98 - 67) + 4)/2)/2 x (1.2 x (422/322 - 0.050 x (81 - 75))) = 83 x 1.212 = 100.596
And for the low end:
Damage = 75 + ((98 - 67) + 4)/2)/2 x (-0.5 + 1.2 x (422/322 - 0.050 x (81 - 75))) = 83 x .712 = 59.096


Finally! We have something to work with, or do we? Sure that is the range, but what is it the range of? And what does all this mean? Well, that is what tomorrow is for!

1 comment:

Anonymous said...

Over at my cousins stealing interweb and i forgot my calculator so i didnt read your blog lol cya tomorrow