FFXIAH.com

Langues: JP EN DE FR
Yellow Box
2140 users online
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.







Introduction




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.




Results




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.









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.





Spreadsheet Manipulation


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.







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       ???             ???           ???          ???
                






Author: Izanami
Date Created: 2022-06-19 11:27:35
Date Last Modified: 2023-04-20 09:00:52
Updates: 264
Bytes: 45726