|
|
Ninjutsu Damage
|
| Most Recent Thread Update |
2022 June 21/22
Corrected typos in csv data tables
Updated figures based on updated fits to corrected data tables
Expanded on results and methods, including a spreadsheet-based analysis
Reworded various paragraphs for clarity
Increased M and V table uncertainties based on model grid resolution.
|
|
|
Our current understanding of how magic damage is calculated is due to extensive community testing with primarily black magic spells. We understand that the base damage (D) of any spell varies linearly with the difference between the player's INT and the enemy's INT (dINT) and that the player's magic damage (mDMG) is part of an additive constant to this linear equation. In order to precisely describe how dINT affects a spell's base damage, we assigned variables to the slope (M) and constant (V) for this linear trend. As a reminder, the equation for a spell's base damage is presented below.
|
Because most of the magic damage testing was performed with black magic, these M and V variables are relatively well constrained for black magic, while those for elemental ninjutsu are relatively poorly constrained.
The original elemental ninjutsu damage testing was completed over a decade ago in 2011 (see Byrthnoth's testing). These early tests had determined M and V for a narrow range of dINT for "Ichi", "Ni", and "San" spells and had set the stage for Ninjutsu damage calculations.
More recent tests were done by Bahadir in 2016 (see Bahadir's testing), covering a larger range of dINT and identifying a few sets of [M,V] pairs to be used throughout the expanded dINT range. This newer testing also identifies skill caps at which Ninjutsu Skill no longer affects damage dealt for the "Ichi" and "Ni" spells.
To complete this work, I have recently performed extensive data collection and analysis towards determining the M and V values for all possible ranges of dINT for the elemental ninjutsu spells. My analysis covers the dINT range from -87 to +445. Data between dINT -87 and +360 is considered to be 100% complete: a "unique" damage data point now exists at every dINT value in this range. This dataset fully defines the five dINT ranges for "Ichi" ninjutsu, the five dINT ranges for "Ni" ninjutsu, and the four dINT ranges for "San" ninjutsu.
To keep things straightforward for those not interested in the methods, I begin by presenting a summary of my findings. I do encourage everyone to read through the entirety of this post to get an idea of how the community comes up with these numbers. From what I can tell, methods and analysis are poorly-represented in much of FFXI's community testing, which turns much of this into a black box for most users.
My data tables are available in plain text (csv) format in my new Github repository (link). These data tables can be used to confirm my results as well as quickly determine the INT of most enemies in the game after casting as few as three spells. I provide an example of this extra feature at the end of this post. I do not provide my code used to analyze the data. A basic analysis that will arrive at statistically identical results as mine is simple enough with Microsoft Excel's trendline capabilities.
|
|
The figure below displays the data I collected for each tier of ninjutsu spell and demonstrates the relationship between dINT and elemental ninjutsu damage. "Ichi" spells are plotted in red, "Ni" spells are plotted in blue, and "San" spells are plotted in green. To help guide the reader's attention to the locations of the various dINT breakpoints for each tier, I've extended the slope of these ranges by 50 dINT as colored dashed lines.
|
Each of these regions of different slope corresponds to a specific [M,V] pair that must be solved for. Best-fitting [M,V] pairs for each dINT range are provided in the tables below. For completeness, the table captions present the range over which a player's ninjutsu skill level affects damage (as part of a multiplicative term to the base damage). Values reported within parenthesis were either not tested completely or not tested at all. These values were instead assumed to be true based on similar results obtained throughout my analysis.
It is important to note that my data suggests the skill caps for "Ni" and "San" ninjutsu are 25 higher than reported on BG Wiki at the time of this work. The ninjutsu skill multiplier equation remains the same, but the new maximum multiplier is 2.125 for "Ni" and "San" spells (up from 2.0) while "Ichi" spells are not affected and remain at a skill cap of 250 (2.0 multiplier). Bahadir's testing in 2016 found an upper skill limit on "Ni" spells of 349. Additionally, my spreadsheet analysis suggests the that the Ninjutsu Skill caps are 349 and 499, for Ni and San spells (and thus a Ninjutsu skill multiplier of 2.12 for Ni and San), respectively (see the Data Analysis section below). This is strange since my in-game data clearly shows an increase in damage as Ninjutsu Skill increases from 499 to 500.
I speculate that the "San" Ninjutsu Skill Potency Bonus equation actually uses ("Ninjutsu Skill" - 1), which would both allow a cap of 500 and satisfy my spreadsheet analysis. I do not explore this further for now, but I will update this main post after conclusive analysis has been done towards determining the true ninjutsu skill caps and Ninjutsu Skill Potency Bonus equations. Alternatively, the skill ranges are actually [Ichi: 0-250], [Ni: 126-350], [San: 276-500].
|
Because the statistical uncertainties on most of these fitted parameters are unrealistically low, with values typically less than 0.01 for V and 0.001 for M, I have scaled them to more realistic levels based on my model grid's resolution. To scale the uncertainties, I simply doubled the original values and added 0.01 or 0.1 for M and V, respectively. The exceptions for this are the M=0.00 values, which will contain zero uncertainty by design. By performing this uncertainty scaling, I ensure that my uncertainties are not orders of magnitude below my model grid's resolution for each parameter.
With the exception of the second dINT range of the "Ichi" spells, which finds M=0.45, all M values here appear to be "correct." Based on the other M values across all spell tiers, which all appear to follow the same evolution pattern, the true M-value for the second dINT range of "Ichi" spells is almost certainly M=0.5. The algorithm's failure to identify this is likely caused by this dINT range containing only eight data points.
My results for [M,V] pairs agree well with Bahadir's testing in 2016 for the dINT ranges that were tested back then. However, my work identifies additional dINT breakpoints not seen in Bahadir's work. This could be due to poor sampling in Bahadir's data collection caused by limited resources available in 2016 to perform such a precise analysis. Alternatively, the FFXI developers may have performed hidden adjustments to the ninjutsu base damage formula within the last six years.
With these results, it is now possible to obtain precise estimates for ninjutsu damage and construct "best in slot" nuking sets for each ninjutsu tier. I've used the above results to modify my Ninja weapon skill Python code (see Using Python3 to estimate BIS gear sets for Ninja.) and determine the "best" nuking sets. These sets are presented below for free-nuking and magic bursting.
|
|
| Free Nuking Ninjutsu Sets |
| ItemSet 385121 |
ItemSet 385120 |
ItemSet 385119 |
• Andartia: INT, mAtk, mAcc/mDMG, mDMG
• Any path Nyame
|
• Andartia: INT, mAtk, mAcc/mDMG, mDMG
• Any path Nyame
|
• Andartia: INT, mAtk, mAcc/mDMG, INT
• Any path Nyame
|
| Magic Bursting Ninjutsu Sets |
| ItemSet 385122 |
ItemSet 385123 |
ItemSet 385124 |
• Andartia: INT, mAtk, mAcc/mDMG, mDMG
• Any path Nyame
|
• Andartia: INT, mAtk, mAcc/mDMG, mDMG
• Any path Nyame
|
• Andartia: INT, mAtk, mAcc/mDMG, INT
• Any path Nyame
|
The sets above were obtained assuming no resists, resulting in sets that have the highest damage potential. The reality is that magic accuracy is an incredibly important stat that can not be ignored. A single resist will cut your damage by a minimum of 50%. With this in mind, I do not recommend using Gyve armor against high tier content since it provides zero magic accuracy.
When using Futae, simply swap out the Nyame Gauntlets for Hattori Tekko +3 for free nukes. There are no additional swaps for magic bursting with Futae.
Note that the Abdhaljs Dye augment on the Andartia's Mantles above are different for "Ichi"/"Ni" and "San" spells. We can see in the above tables that the M value is never higher than 1.0 for "Ichi" and "Ni" nukes. This means that magic damage is always as good or better than INT for these tiers of ninjutsu. Thus your "Ichi" and "Ni" nuking capes should use "Magic Damage +10" as their Abdhaljs Dye augment.
On the other hand, "San" nukes typically use M=1.5, meaning INT is 1.5 times "better" than magic damage. In fact, the M value for "San" nukes is 1.0 or higher for the dINT range -52 <= dINT <= +353, which covers just about every situation you will realistically encounter. Because of this, your "San" nuking cape should use "INT +10" as its Abdhaljs Dye augment.
Between the two, I recommend using "INT +10" over "Magic Damage +10" since "San" nukes are typically used more frequently than "Ichi" and "Ni" nukes.
Additionally, the above sets assumed that the player has 5/5 merits in "Ninjutsu Magic Attack" group2 merits. These merits give +5% Ninjutsu Damage per merit when wearing the Mochizuki Kyahan +3 (Relic+3 feet) for +25% damage total. If you do not have 5/5 merits in "Ninjutsu Magic Attack", then your magic burst sets should use Nyame Sollerets (any path, any rank) and your free nuke sets should use Nyame Sollerets (any path, any rank) for "Ni"/"San" nukes and Mpaca's Boots R25 for "Ichi" nukes.
This difference in stat priority is easily explained with the dINT caps for each spell tier. "Ichi" spells reach their dINT cap at dINT=75, at which point M=0.0, causing more INT to add zero extra damage. The additional +25 INT on Nyame Sollerets does not benefit "Ichi" spells above this small dINT=75 limit, but the additional magic attack bonus on the augmented Mpaca Boots do continue to increase damage dealt. This is also why we see that Dingir Ring and Shiva Ring +1 are favored over Metamorph Ring +1 R15 in the "Ichi" sets. The "Ni" and "San" nukes have much higher dINT caps that are not likely to be reached in high-end content.
|
| Data Collection |
I collected data by casting elemental ninjutsu on Lv0 Huge Hornets (South Gustaberg; INT=6; dINT>=115) and Lv127 Apex Mandragora (Sih Gates; INT=208; dINT<=123) with various levels of player INT. The gear I chose for each nuke contained no "magic attack bonus" or "magic damage" stats. I also removed my Group1 and Group2 merits before collecting data. However, Ninja Job Point categories and Job Point gifts provide +28 Magic Attack Bonus and +40 Magic Damage that was accounted for in my analysis. The data on each target partially overlaps between dINT 115-123, which helped confirm the INT of each target while still collecting data. To obtain data on dINT>331, I enlisted the help of Sensarity, who provided Boost-INT, Sage Etude, and Learned Etude, which increased my highest measured dINT value to +445 INT. This additional boost in INT is what allowed us to locate the final dINT breakpoints for "Ni" and "San" spells.
To test the ninjutsu skill limits, I convinced Sensarity to skill up ninjutsu and cast a spell on Huge Hornets after every few levels. This was easily done by using skill up books. We made use of this method from 273 to 367 ninjutsu skill, providing data on the lower skill limit of "San" spells and the upper skill limit of "Ni" spells. Data for this testing is provided in the spoilers below.
|
Code
Skill Damage
273 270
274 270
275 270
276 270
--- ---
280 275
--- ---
283 278
--- ---
297 299
Unfortunately, the boost in damage from leveling from 274 to 276 skill appeared to be too small to cause a measureable increase in damage (adding +1 skill with no gear equipped was worth less than 1 damage). Another round of identical testing with higher numbers is necessary to confirm the 275 skill minimum, but our numbers heavily suggest that the ninjutsu skill lower limit is 275 for "San" spells, in agreement with what is reported on BG Wiki. I use this as reason to believe that the "Ni" and "Ichi" ninjutsu skill lower limits agree with what is posted on BG Wiki.
|
Code
Skill Damage
310 1314
311 1323
--- ---
320 1350
321 1355
--- ---
325 1371
326 1371
--- ---
330 1385
331 1385
--- ---
340 1417
341 1417
--- ---
350 1452
--- ---
352 1452
--- ---
367 1452
In this case, we equipped Nyame armor to increase the damage dealt (and thus the precision of our results) and avoid the problem we saw in our "San" testing. While our data does not include a data point between 342-349 ninjutsu skill, I believe the skill cap is likely 350 for Ni spells. However, better data sampling is required to confirm the results of Bahadir's 2016 testing which suggested a skill cap of 349.
|
Code
Skill Damage
488 6198
489 ----
490 6228
491 ----
492 6258
493 6258
494 ----
495 6287
496 ----
497 6320
498 6350
499 6350
500 6380
501 ----
502 ----
503 ----
504 ----
505 6380
506 ----
507 6380
As a Master Level 31 Ninja, my ninjutsu skill without gear on is coincidentally 500. To determine the upper ninjutsu skill limit for "San" spells, I removed my Ninjutsu Skill merits and began collecting data at various ninjutsu skill levels by equipping "Ninjutsu Skill+" gear and increasing my merits again. In this case, we can easily see that damage stops increasing after reaching 500 skill, suggesting the "San" spell skill cap is 500.
However, my spreadsheet analysis of the data (see below) suggests a skill cap of 499, despite my data above clearly showing that the cap is 500. I retested this with better equipment and a higher Ninjutsu Skill sampling and confirm that the "San" skill cap is 500:
Code
|Skill| 0| 1| 2| 3| 4| 5| 6| 7| 8|
----------------------------------------------------------------------
| 484| 9748| | | | | | | | |
| 485| | | | | | | | | |
| 486| | 9796| | | | | | | |
| 487| | | | | | | | | |
| 488| | | 9845| | | | | | |
| 489| 9845| | | | | | | | |
| 490| | | | 9893| | | | | |
| 491| 9893| 9893| | | | | | | |
| 492| | | | | 9937| | | | |
| 493| | | 9937| | | | | | |
| 494| 9986| | | | | 9986| | | |
| 495| | | 9986| 9986| | | | | |
| 496| 10034| | | | | | 10034| | |
| 497| | | | 10034| 10034| | | | |
| 498| | 10083| 10083| | | | | 10083| |
| 499| 10083| | | | 10083| 10083| | | |
| 500| | | 10131| | | | | | 10131|
| 501| | 10131| | | | 10131| 10131| | |
| 502| | | | 10131| 10131| | | | |
| 503| | | 10131| | | | 10131| 10131| |
| 504| | | | | | 10131| | | |
| 505| | | | 10131| | | | 10131| 10131|
| 506| | | | | | 10131| 10131| | |
| 507| | | | | 10131| | | | 10131|
----------------------------------------------------------------------
The table above displays the damage dealt by "San" ninjutsu with varying Ninjutsu Skill level. The first column displays my Ninjutsu Skill level, while the top row displays the number of Ninjutsu Skill merits I had activated at the time. Once again it is obvious that damage stops increasing after ninjutsu skill reaches 500, confirming that the "San" ninjutsu skill cap must be 500.
|
|
| Data Analysis: Finding M and V |
| Levenberg-Marquardt Minimization |
For my analysis, I first split the data for each spell tier based on its observed dINT breakpoints. For each subset of data, I applied a 2D Levenberg-Marquardt minimization algorithm with a chi-squared merit function to obtain estimates on the [M,V] pair for each range. I will use these estimates in a further analysis in the next step. I compare the data against a grid of models using on the base-damage equation provided at the top of this post, scaled only by the "magic attack bonus multiplier" and "ninjutsu skill bonus multiplier" and truncated at each step:
D = (V + mDMG + (dINT)*M)
model_damage = math.trunc( matk_bonus_multiplier*math.trunc( ninjutsu_skill_multiplier*math.trunc(D) ) )
My model grid used values of M ranging from M=[-5,+5) in steps of 0.5 and values of V ranging from V=[0,1000) in steps of 5. However, because this method interpolates over a model grid, the interpolated values will, by design, not agree perfectly with the data for regions with M>0.
An additional consequence of trying to determine constants within a multi-layered, multi-truncated, interpolated model is that the Levenberg-Marquardt algorithm may arrive at parameter estimates that do satisfy the data, but are not correct in the traditional sense. For example: the V value for the M=0 "Ichi" spells can have any value from 11.0 to 11.9 and still return identical results. This may (and likely will) confuse the algorithm into picking 11.9 as the "correct" solution. It is because of this that I only use this algorithm to arrive at the "almost perfect" solutions and then perform a more detailed, manual, analysis using a spreadsheet.
I present my fitted linear trends to each full data set over-plotted onto the datasets themselves in the figures below. I separate the various dINT ranges with dashed vertical lines. In all cases, the model agrees well with the data, with residuals less than ~3.0 damage in all cases.
|
As discussed above, the values obtained up to now are "only" very good estimates. To obtain "better" values, I use Microsoft Excel to manually adjust these [M,V] pairs and try to find values that return exact damage matches for all spell tiers and for all dINT values. Because the Levenberg-Marquardt algorithm already found statistically correct values, I was able to apply my minor modifications for the true [M,V] values relatively quickly. However, doing so required me to use 499 as the "San" ninjutsu skill cap, which directly conflicts with two datasets discussed above.
This analysis is very simple, so there is not much to say about it.
I used the following equation in Microsoft Excel and modified the relevant M and V values until ALL residuals were exactly zero.
Code =TRUNC( TRUNC( TRUNC( V + mDMG + M*dINT ) * NinjutsuSkillPotency ) * MagicAttackPotency )
Using the values from the first analysis and ["Ichi","Ni","San"] ninjutsu skill caps of [250,350,500], I was unable to perfectly replicated the observed data for the "Ni" and "San" ninjutsu, even after manually adjusting parameters and rearranging the terms in the equation used.
Since my "Ni" ninjutsu skill cap was not properly sampled, I adjusted the spreadsheet's "Ni" ninjutsu skill cap to Bahadir's value of 349 and made minor adjustments to the M and V values once again, starting from the original [M,V] found in my previous analysis. Doing this enabled me to exactly match all damage values for all dINT for "Ni" ninjutsu. Similarly, I lowered my "San" Ninjutsu Skill cap to 499 and was able to exactly match all damage values for all dINT after minor adjustments to the M and V values found in my previous analysis. This spreadsheet analysis suggests that the ninjutsu skill caps for "Ni" and "San" spells are 349 and 499, respectively.
Below is an image of my final Microsoft Excel table, which presents the final "perfect" M and V values for each dINT range and for each ninjutsu tier. These are the values that I used to obtain exact matches to 100% of my observed data. Because the model equation uses multiple layers of truncation, just about each of the "V" values can be modified by +- 0.5 without affecting the final results at all.
While the above values do accurately recover the data that I see in game, they also introduce an inconsistency in the observed data and the spreadsheet-based model. My data does a poor job demonstrating that the "Ni" skill cap is 350, so I can believe that the true cap is 349, as seen in Bahadir's analysis. However, two of my data sets (both presented above) clearly demonstrate the "San" skill cap is 500, which directly conflicts with my "perfect" spreadsheet-based model. Resolving this discrepancy is beyond the scope of what I'm willing to do for now, so I'll leave this problem for the community to solve. The solution may be as simple as the "San" Ninjutsu Skill Potency Bonus using ("Ninjutsu Skill" - 1) in its equation, but this would require additional testing into the ninjutsu skill limits to confirm.
For now, I have presented two sets of parameters that both describe how ninjutsu damage varies with dINT. These parameter sets are nearly identical, but this is to be expected since the first set used a simple, yet sophisticated, minimization algorithm to determine the best parameters, and the second set of parameters were based on the first set. Using either set of parameters for your own future calculations should result in similarly precise results.
|
|
| Determining enemy INT using ninjutsu damage tables |
With access to the M and V variables over the entire dINT range for ninjutsu, obtaining enemy INT values on Ninja is as easy as "Ichi-Ni-San!" Simply comparing the damage dealt by your nukes against the data tables included with this work will allow you to directly read off the dINT value associated with that monster, provided the enemy does not have a complicated combination of SDT and MDT. Keep in mind that the damage tables I provide were created with only +28 magic attack bonus and +40 magic damage and 500 ninjutsu skill. If you have a different amount these stats, then your damage will not line up with those in the table. Additionally, you will need to know your INT value to use dINT to calculate the enemy's INT. At the time of my testing below, I had 289 INT.
As an example of doing this in practice, I've chosen a handful of random Apex enemies in the basement of Crawler's Nest [S]. These are relevant targets to estimate INT for since Aeolian Edge and other magical weapon skills use dINT as part of their damage forumae. Because Apex enemies typically have three sets of stats, I tried to test at least two enemies per monster type. This was not practical after a few, since my ArkAngelEV trust tank quickly became overwhelmed when tanking 5~6 Apex enemies at once, even with 4 healer trusts.
|
Code
dINT Ichi Ni San
20 194 349 552
21 197 352 555
22 199 354 560
23 202 357 563
24 204 359 569
25 207 363 572
26 207 366 577
27 209 368 579
28 209 371 584
29 212 373 588
30 212 376 593
31 215 378 596
32 215 381 601
33 217 385 604
34 217 387 610
35 220 390 613
36 220 392 618
37 222 395 620
38 222 398 625
39 225 400 628
40 225 403 634
41 227 407 637
42 227 409 642
43 230 412 645
44 230 414 650
45 232 417 652
46 232 419 659
47 235 422 661
48 235 424 666
49 238 427 669
50 238 431 674
51 240 433 678
52 240 436 683
53 243 439 686
54 243 441 691
55 245 444 693
56 245 446 698
57 248 449 702
58 248 453 707
59 248 455 710
60 250 458 715
61 253 460 718
62 253 463 724
63 256 465 727
64 256 468 732
65 258 471 734
66 258 474 739
67 261 477 742
68 261 480 748
69 263 482 751
70 263 485 756
71 266 487 759
72 266 490 764
73 268 492 766
74 268 495 773
75 271 499 775
76 271 501 780
77 271 504 783
78 271 506 788
79 271 509 792
80 271 512 797
81 271 514 800
82 271 517 805
83 271 520 807
84 271 523 814
85 271 526 816
86 271 528 821
87 271 531 824
88 271 533 829
89 271 536 832
90 271 538 838
|
From the above screenshots and table, and knowing that the player character had 289INT, we can read off each enemy's INT. Note that there is one -10% Water weather proc on a Katon Ichi in the images.
With the exception of a particularly weak Apex Nest Elytra that shows INT=209, all other values agree with what can be found on the Japanese Wiki pages of Apex enemy stats.
Code
HornFly BlazerElytra NestElytra Lugcrawler
INT1 243 235 209 261
INT2 249 241 219 ???
INT3 ??? ??? ??? ???
|
|
|
Date Created: 2022-06-19 11:27:35
Date Last Modified: 2023-04-20 09:00:52
Updates: 264
Bytes: 45726
|
|