Theorycrafting for Final Fantasy XIV.
This project is maintained by rconcep
from samurai import *
from plotting import *
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sb
from IPython.display import display
%matplotlib inline
pd.options.display.max_rows = None
Level 50 unlocks the final weaponskill, Yukikaze, a combo finisher to open the final Sen, Setsu. It combos from Hakaze so it is a two hit combo contrary to Gekko and Kasha. It applies a slashing resistance down debuff to the target.
Level 50 also confers the Meikyo Shisui ability, a cooldown that allows you to execute up to 3 combo abilities without meeting combo prerequisites. This may be used, for example, to quickly get Jinpu and Shifu buffs up or to open up all three Sen in a fraction of the time as normal. Note that Iaijutsu do not consume a charge. Additionally, any combo actions used during Meikyo Shisui will not continue after the buff falls off. For example, if you use the last charge on Jinpu, the combo action for Gekko will not be primed after Meikyo Shisui falls off.
The opening of the final Sen unlocks the final Iaijutsu, Midare Setsugekka. This powerful single target nuke gives the opportunity in single target situations to deal massive damage without having to clip Higanbana.
With our repertoire of weaponskills complete plus a new cooldown to play with, let’s explore opener options.
Buff first: Shifu > Jinpu > Yukikaze.
Iaijutsu: Apply Higanbana after getting Jinpu buff. Remaining Sen build towards Midare Setsugekka.
Meikyo Shisui: generate second Midare Setsugekka.
sam = Samurai()
n_targets = 1
actions = [('Hakaze'), ('Shifu'), ('Kasha'), ('Hakaze'),
('Jinpu'), ('Higanbana'), ('Gekko'), ('Hakaze'),
('Yukikaze'), ('Hakaze'), ('Shifu'), ('Kasha'),
('Midare Setsugekka', 'Meikyo Shisui'), ('Kasha'), ('Gekko'), ('Yukikaze'),
('Midare Setsugekka'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Hakaze'), ('Yukikaze')]
df0, average_potency, pps = sam.parse_rotation(actions)
display(df0)
average potency per GCD = 411.8647727272726
average potency per second = 189.719953936
Time | Weaponskill | Ability | Potency | Jinpu | Shifu | Yukikaze | Higanbana | Kenki | Total Potency | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.00 | Hakaze | 150.000 | False | False | False | 0 | 0 | 150.000 | |
1 | 2.40 | Shifu | 280.000 | False | False | False | 0 | 0 | 430.000 | |
2 | 4.56 | Kasha | 400.000 | False | True | False | 0 | 0 | 830.000 | |
3 | 6.72 | Hakaze | 150.000 | False | True | False | 0 | 0 | 980.000 | |
4 | 8.88 | Jinpu | 280.000 | False | True | False | 0 | 0 | 1260.000 | |
5 | 11.04 | Higanbana | 276.000 | True | True | False | 0 | 0 | 1536.000 | |
6 | 13.20 | Gekko | 488.980 | True | True | False | 1 | 0 | 2024.980 | |
7 | 15.36 | Hakaze | 201.480 | True | True | False | 1 | 0 | 2226.460 | |
8 | 17.52 | Yukikaze | 419.980 | True | True | False | 1 | 0 | 2646.440 | |
9 | 19.68 | Hakaze | 220.455 | True | True | True | 1 | 0 | 2866.895 | |
10 | 21.84 | Shifu | 386.400 | True | True | True | 1 | 0 | 3253.295 | |
11 | 24.00 | Kasha | 539.580 | True | True | True | 1 | 0 | 3792.875 | |
12 | 26.16 | Midare Setsugekka | Meikyo Shisui | 948.060 | True | True | True | 1 | 0 | 4740.935 |
13 | 28.32 | Kasha | 539.580 | True | True | True | 1 | 0 | 5280.515 | |
14 | 30.48 | Gekko | 539.580 | True | True | True | 1 | 0 | 5820.095 | |
15 | 32.64 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 6283.085 | |
16 | 34.80 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 7231.145 | |
17 | 36.96 | Hakaze | 220.455 | True | True | True | 1 | 0 | 7451.600 | |
18 | 39.12 | Jinpu | 386.400 | False | True | True | 1 | 0 | 7838.000 | |
19 | 41.28 | Gekko | 539.580 | True | True | True | 1 | 0 | 8377.580 | |
20 | 43.44 | Hakaze | 220.455 | True | True | True | 1 | 0 | 8598.035 | |
21 | 45.60 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 9061.025 |
plot_potency(df0)
Similar to Opener 1, just prioritize the buffs Jinpu > Shifu > Yukikaze so that the Higanbana DoT is applied earlier.
sam = Samurai()
n_targets = 1
actions = [('Hakaze'), ('Jinpu'), ('Gekko'), ('Higanbana'),
('Hakaze'), ('Shifu'), ('Kasha'), ('Hakaze'),
('Yukikaze'), ('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka', 'Meikyo Shisui'), ('Kasha'), ('Gekko'), ('Yukikaze'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze')]
df1, average_potency, pps = sam.parse_rotation(actions)
display(df1)
average potency per GCD = 420.45113636363635
average potency per second = 189.858887521
Time | Weaponskill | Ability | Potency | Jinpu | Shifu | Yukikaze | Higanbana | Kenki | Total Potency | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.00 | Hakaze | 150.000 | False | False | False | 0 | 0 | 150.000 | |
1 | 2.40 | Jinpu | 280.000 | False | False | False | 0 | 0 | 430.000 | |
2 | 4.80 | Gekko | 460.000 | True | False | False | 0 | 0 | 890.000 | |
3 | 7.20 | Higanbana | 276.000 | True | False | False | 0 | 0 | 1166.000 | |
4 | 9.60 | Hakaze | 204.700 | True | False | False | 1 | 0 | 1370.700 | |
5 | 12.00 | Shifu | 354.200 | True | False | False | 1 | 0 | 1724.900 | |
6 | 14.16 | Kasha | 488.980 | True | True | False | 1 | 0 | 2213.880 | |
7 | 16.32 | Hakaze | 201.480 | True | True | False | 1 | 0 | 2415.360 | |
8 | 18.48 | Yukikaze | 419.980 | True | True | False | 1 | 0 | 2835.340 | |
9 | 20.64 | Hakaze | 220.455 | True | True | True | 1 | 0 | 3055.795 | |
10 | 22.80 | Jinpu | 386.400 | True | True | True | 1 | 0 | 3442.195 | |
11 | 24.96 | Gekko | 539.580 | True | True | True | 1 | 0 | 3981.775 | |
12 | 27.12 | Midare Setsugekka | Meikyo Shisui | 948.060 | True | True | True | 1 | 0 | 4929.835 |
13 | 29.28 | Kasha | 539.580 | True | True | True | 1 | 0 | 5469.415 | |
14 | 31.44 | Gekko | 539.580 | True | True | True | 1 | 0 | 6008.995 | |
15 | 33.60 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 6471.985 | |
16 | 35.76 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 7420.045 | |
17 | 37.92 | Hakaze | 220.455 | True | True | True | 1 | 0 | 7640.500 | |
18 | 40.08 | Shifu | 386.400 | True | True | True | 1 | 0 | 8026.900 | |
19 | 42.24 | Kasha | 539.580 | True | True | True | 1 | 0 | 8566.480 | |
20 | 44.40 | Hakaze | 220.455 | True | True | True | 1 | 0 | 8786.935 | |
21 | 46.56 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 9249.925 |
plot_potency(df1)
Open with Meikyo Shisui to apply buffs and debuffs ASAP.
Iaijutsu: Apply Higanbana first. Remaining Sen build towards Midare Setsugekka.
sam = Samurai()
n_targets = 1
sam.meikyo_shisui()
actions = [('Jinpu'), ('Shifu'), ('Yukikaze'),
('Higanbana'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka')]
df2, average_potency, pps = sam.parse_rotation(actions)
display(df2)
average potency per GCD = 415.8231818181817
average potency per second = 191.543341709
Time | Weaponskill | Ability | Potency | Jinpu | Shifu | Yukikaze | Higanbana | Kenki | Total Potency | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.00 | Jinpu | 280.000 | False | False | False | 0 | 0 | 280.000 | |
1 | 2.40 | Shifu | 322.000 | True | False | False | 0 | 0 | 602.000 | |
2 | 4.56 | Yukikaze | 391.000 | True | True | False | 0 | 0 | 993.000 | |
3 | 6.72 | Higanbana | 306.360 | True | True | True | 0 | 0 | 1299.360 | |
4 | 8.88 | Hakaze | 220.455 | True | True | True | 1 | 0 | 1519.815 | |
5 | 11.04 | Shifu | 386.400 | True | True | True | 1 | 0 | 1906.215 | |
6 | 13.20 | Kasha | 539.580 | True | True | True | 1 | 0 | 2445.795 | |
7 | 15.36 | Hakaze | 220.455 | True | True | True | 1 | 0 | 2666.250 | |
8 | 17.52 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 3129.240 | |
9 | 19.68 | Hakaze | 220.455 | True | True | True | 1 | 0 | 3349.695 | |
10 | 21.84 | Jinpu | 386.400 | True | True | True | 1 | 0 | 3736.095 | |
11 | 24.00 | Gekko | 539.580 | True | True | True | 1 | 0 | 4275.675 | |
12 | 26.16 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 5223.735 | |
13 | 28.32 | Hakaze | 220.455 | True | True | True | 1 | 0 | 5444.190 | |
14 | 30.48 | Shifu | 386.400 | True | True | True | 1 | 0 | 5830.590 | |
15 | 32.64 | Kasha | 539.580 | True | True | True | 1 | 0 | 6370.170 | |
16 | 34.80 | Hakaze | 220.455 | True | True | True | 1 | 0 | 6590.625 | |
17 | 36.96 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 7053.615 | |
18 | 39.12 | Hakaze | 220.455 | True | True | True | 1 | 0 | 7274.070 | |
19 | 41.28 | Jinpu | 386.400 | True | True | True | 1 | 0 | 7660.470 | |
20 | 43.44 | Gekko | 539.580 | True | True | True | 1 | 0 | 8200.050 | |
21 | 45.60 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 9148.110 |
plot_potency(df2)
Open with Yukikaze and use Meikyo Shisui to get Jinpu and Shifu up faster.
Iaijutsu: Apply Higanbana first.
sam = Samurai()
n_targets = 1
actions = [('Hakaze'), ('Yukikaze', 'Meikyo Shisui'),
('Jinpu'), ('Higanbana'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Hakaze'), ('Yukikaze'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka')]
df3, average_potency, pps = sam.parse_rotation(actions)
display(df3)
average potency per GCD = 416.1273809523808
average potency per second = 188.658786701
Time | Weaponskill | Ability | Potency | Jinpu | Shifu | Yukikaze | Higanbana | Kenki | Total Potency | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.00 | Hakaze | 150.000 | False | False | False | 0 | 0 | 150.000 | |
1 | 2.40 | Yukikaze | Meikyo Shisui | 340.000 | False | False | False | 0 | 0 | 490.000 |
2 | 4.80 | Jinpu | 310.800 | False | False | True | 0 | 0 | 800.800 | |
3 | 7.20 | Higanbana | 306.360 | True | False | True | 0 | 0 | 1107.160 | |
4 | 9.60 | Shifu | 389.620 | True | False | True | 1 | 0 | 1496.780 | |
5 | 11.76 | Kasha | 539.580 | True | True | True | 1 | 0 | 2036.360 | |
6 | 13.92 | Hakaze | 220.455 | True | True | True | 1 | 0 | 2256.815 | |
7 | 16.08 | Jinpu | 386.400 | True | True | True | 1 | 0 | 2643.215 | |
8 | 18.24 | Gekko | 539.580 | True | True | True | 1 | 0 | 3182.795 | |
9 | 20.40 | Hakaze | 220.455 | True | True | True | 1 | 0 | 3403.250 | |
10 | 22.56 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 3866.240 | |
11 | 24.72 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 4814.300 | |
12 | 26.88 | Hakaze | 220.455 | True | True | True | 1 | 0 | 5034.755 | |
13 | 29.04 | Shifu | 386.400 | True | True | True | 1 | 0 | 5421.155 | |
14 | 31.20 | Kasha | 539.580 | True | True | True | 1 | 0 | 5960.735 | |
15 | 33.36 | Hakaze | 220.455 | True | True | True | 1 | 0 | 6181.190 | |
16 | 35.52 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 6644.180 | |
17 | 37.68 | Hakaze | 220.455 | True | True | True | 1 | 0 | 6864.635 | |
18 | 39.84 | Jinpu | 386.400 | True | True | True | 1 | 0 | 7251.035 | |
19 | 42.00 | Gekko | 539.580 | True | True | True | 1 | 0 | 7790.615 | |
20 | 44.16 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 8738.675 |
plot_potency(df3)
Open with Gekko and use Meikyo Shisui to get Shifu and Yukikaze up.
Iaijutsu: Apply Higanbana first.
sam = Samurai()
n_targets = 1
actions = [('Hakaze'), ('Jinpu'), ('Gekko', 'Meikyo Shisui'),
('Higanbana'), ('Shifu'), ('Yukikaze'), ('Kasha'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka')]
df4, average_potency, pps = sam.parse_rotation(actions)
display(df4)
average potency per GCD = 424.93149999999997
average potency per second = 192.450860507
Time | Weaponskill | Ability | Potency | Jinpu | Shifu | Yukikaze | Higanbana | Kenki | Total Potency | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.00 | Hakaze | 150.000 | False | False | False | 0 | 0 | 150.000 | |
1 | 2.40 | Jinpu | 280.000 | False | False | False | 0 | 0 | 430.000 | |
2 | 4.80 | Gekko | Meikyo Shisui | 460.000 | True | False | False | 0 | 0 | 890.000 |
3 | 7.20 | Higanbana | 276.000 | True | False | False | 0 | 0 | 1166.000 | |
4 | 9.60 | Shifu | 354.200 | True | False | False | 1 | 0 | 1520.200 | |
5 | 11.76 | Yukikaze | 419.980 | True | True | False | 1 | 0 | 1940.180 | |
6 | 13.92 | Kasha | 539.580 | True | True | True | 1 | 0 | 2479.760 | |
7 | 16.08 | Hakaze | 220.455 | True | True | True | 1 | 0 | 2700.215 | |
8 | 18.24 | Jinpu | 386.400 | True | True | True | 1 | 0 | 3086.615 | |
9 | 20.40 | Gekko | 539.580 | True | True | True | 1 | 0 | 3626.195 | |
10 | 22.56 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 4574.255 | |
11 | 24.72 | Hakaze | 220.455 | True | True | True | 1 | 0 | 4794.710 | |
12 | 26.88 | Shifu | 386.400 | True | True | True | 1 | 0 | 5181.110 | |
13 | 29.04 | Kasha | 539.580 | True | True | True | 1 | 0 | 5720.690 | |
14 | 31.20 | Hakaze | 220.455 | True | True | True | 1 | 0 | 5941.145 | |
15 | 33.36 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 6404.135 | |
16 | 35.52 | Hakaze | 220.455 | True | True | True | 1 | 0 | 6624.590 | |
17 | 37.68 | Jinpu | 386.400 | True | True | True | 1 | 0 | 7010.990 | |
18 | 39.84 | Gekko | 539.580 | True | True | True | 1 | 0 | 7550.570 | |
19 | 42.00 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 8498.630 |
plot_potency(df4)
dfs = [df4, df3, df2, df1, df0]
labels = ['Opener 5', 'Opener 4', 'Opener 3', 'Opener 2', 'Opener 1']
compare_n_potencies(dfs, labels)
The time horizon was selected so that each opener had at least two Midare Setsugekka.
These openers have fairly similar cumulative potencies over the selected time horizon. At level 50, you have no other offensive cooldowns when considering buff alignment. Party synergies will need to be considered to determine the best placement. (Maximizing potency delivered under party buffs.) Higanbana is applied at a different time and each opener bursts at different times. Since Higanbana and Midare Setsugekka have the highest effective potency per GCD (with DoT snapshot), getting those Iaijutsu under party buffs will differentiate these openers’ potency significantly.
fig, ax = plt.subplots(figsize=(12, 4))
for k, df in enumerate(dfs):
ax.plot(df['Time'], df['Potency'], label=labels[k])
ax.set_xlabel('Time')
ax.set_ylabel('Potency')
ax.legend(loc='upper left', framealpha=0.5)
fig.suptitle('Opener Potency over Time')
fig.tight_layout(pad=3)
In a vacuum, 40s into an encounter from scratch, these five different openers are virtually indistinguishable from each other. The ramp up time of SAM, even at higher levels, minimizes the impact of opener design (in a vacuum). Party buff timing and encounter design will play a more significant role in rotation efficacy than anything else. As long as you keep the GCD rolling, follow a good priority system, and don’t waste resource, you will be performing near optimally.
Maintain buffs and debuffs. Shifu and Jinpu are virtually equal in importance (see part 5) and the slashing resistance down can likely be handled by another player.
Apply Higanbana if it can tick for at least half its duration. Use Midare Setsugekka if not or if Higanbana is already applied.
Use Meikyo Shisui to open Sen/use your combo finishers. See part 5 for in-depth discussion.
AoE principles are unchanged from lvl 45; Meikyo Shisui can be used similarly.
For short duration phases (60-90s or so), some more thought may be needed in how you approach it.
This opener had the highest average potency by a slim margin.
sam = Samurai()
n_targets = 1
actions = [('Hakaze'), ('Jinpu'), ('Gekko', 'Meikyo Shisui'),
('Higanbana'), ('Shifu'), ('Yukikaze'), ('Kasha'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka'),
('Hakaze'), ('Yukikaze'),
('Higanbana'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Hakaze'), ('Yukikaze', 'Meikyo Shisui'),
('Midare Setsugekka'), ('Kasha'), ('Yukikaze'), ('Gekko'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Hakaze'), ('Yukikaze'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Higanbana'), ('Jinpu'), ('Gekko'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Midare Setsugekka')]
df4_ext, average_potency, pps = sam.parse_rotation(actions)
display(df4_ext)
average potency per GCD = 435.62537313432864
average potency per second = 200.349395936
Time | Weaponskill | Ability | Potency | Jinpu | Shifu | Yukikaze | Higanbana | Kenki | Total Potency | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.00 | Hakaze | 150.000 | False | False | False | 0 | 0 | 150.000 | |
1 | 2.40 | Jinpu | 280.000 | False | False | False | 0 | 0 | 430.000 | |
2 | 4.80 | Gekko | Meikyo Shisui | 460.000 | True | False | False | 0 | 0 | 890.000 |
3 | 7.20 | Higanbana | 276.000 | True | False | False | 0 | 0 | 1166.000 | |
4 | 9.60 | Shifu | 354.200 | True | False | False | 1 | 0 | 1520.200 | |
5 | 11.76 | Yukikaze | 419.980 | True | True | False | 1 | 0 | 1940.180 | |
6 | 13.92 | Kasha | 539.580 | True | True | True | 1 | 0 | 2479.760 | |
7 | 16.08 | Hakaze | 220.455 | True | True | True | 1 | 0 | 2700.215 | |
8 | 18.24 | Jinpu | 386.400 | True | True | True | 1 | 0 | 3086.615 | |
9 | 20.40 | Gekko | 539.580 | True | True | True | 1 | 0 | 3626.195 | |
10 | 22.56 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 4574.255 | |
11 | 24.72 | Hakaze | 220.455 | True | True | True | 1 | 0 | 4794.710 | |
12 | 26.88 | Shifu | 386.400 | True | True | True | 1 | 0 | 5181.110 | |
13 | 29.04 | Kasha | 539.580 | True | True | True | 1 | 0 | 5720.690 | |
14 | 31.20 | Hakaze | 220.455 | True | True | True | 1 | 0 | 5941.145 | |
15 | 33.36 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 6404.135 | |
16 | 35.52 | Hakaze | 220.455 | True | True | True | 1 | 0 | 6624.590 | |
17 | 37.68 | Jinpu | 386.400 | True | True | True | 1 | 0 | 7010.990 | |
18 | 39.84 | Gekko | 539.580 | True | True | True | 1 | 0 | 7550.570 | |
19 | 42.00 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 8498.630 | |
20 | 44.16 | Hakaze | 220.455 | True | True | True | 1 | 0 | 8719.085 | |
21 | 46.32 | Shifu | 386.400 | True | True | True | 1 | 0 | 9105.485 | |
22 | 48.48 | Kasha | 539.580 | True | True | True | 1 | 0 | 9645.065 | |
23 | 50.64 | Hakaze | 220.455 | True | True | True | 1 | 0 | 9865.520 | |
24 | 52.80 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 10328.510 | |
25 | 54.96 | Hakaze | 220.455 | True | True | True | 1 | 0 | 10548.965 | |
26 | 57.12 | Jinpu | 386.400 | True | True | True | 1 | 0 | 10935.365 | |
27 | 59.28 | Gekko | 539.580 | True | True | True | 1 | 0 | 11474.945 | |
28 | 61.44 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 12423.005 | |
29 | 63.60 | Hakaze | 220.455 | True | True | True | 1 | 0 | 12643.460 | |
30 | 65.76 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 13106.450 | |
31 | 67.92 | Higanbana | 335.340 | True | True | True | 1 | 0 | 13441.790 | |
32 | 70.08 | Hakaze | 220.455 | True | True | True | 1 | 0 | 13662.245 | |
33 | 72.24 | Shifu | 386.400 | True | True | True | 1 | 0 | 14048.645 | |
34 | 74.40 | Kasha | 539.580 | True | True | True | 1 | 0 | 14588.225 | |
35 | 76.56 | Hakaze | 220.455 | True | True | True | 1 | 0 | 14808.680 | |
36 | 78.72 | Jinpu | 386.400 | True | True | True | 1 | 0 | 15195.080 | |
37 | 80.88 | Gekko | 539.580 | True | True | True | 1 | 0 | 15734.660 | |
38 | 83.04 | Hakaze | 220.455 | True | True | True | 1 | 0 | 15955.115 | |
39 | 85.20 | Yukikaze | Meikyo Shisui | 462.990 | True | True | True | 1 | 0 | 16418.105 |
40 | 87.36 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 17366.165 | |
41 | 89.52 | Kasha | 539.580 | True | True | True | 1 | 0 | 17905.745 | |
42 | 91.68 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 18368.735 | |
43 | 93.84 | Gekko | 539.580 | True | True | True | 1 | 0 | 18908.315 | |
44 | 96.00 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 19856.375 | |
45 | 98.16 | Hakaze | 220.455 | True | True | True | 1 | 0 | 20076.830 | |
46 | 100.32 | Shifu | 386.400 | True | True | True | 1 | 0 | 20463.230 | |
47 | 102.48 | Kasha | 539.580 | True | True | True | 1 | 0 | 21002.810 | |
48 | 104.64 | Hakaze | 220.455 | True | True | True | 1 | 0 | 21223.265 | |
49 | 106.80 | Jinpu | 386.400 | True | True | True | 1 | 0 | 21609.665 | |
50 | 108.96 | Gekko | 539.580 | True | True | True | 1 | 0 | 22149.245 | |
51 | 111.12 | Hakaze | 220.455 | True | True | True | 1 | 0 | 22369.700 | |
52 | 113.28 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 22832.690 | |
53 | 115.44 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 23780.750 | |
54 | 117.60 | Hakaze | 220.455 | True | True | True | 1 | 0 | 24001.205 | |
55 | 119.76 | Shifu | 386.400 | True | True | True | 1 | 0 | 24387.605 | |
56 | 121.92 | Kasha | 539.580 | True | True | True | 1 | 0 | 24927.185 | |
57 | 124.08 | Hakaze | 220.455 | True | True | True | 1 | 0 | 25147.640 | |
58 | 126.24 | Higanbana | 335.340 | True | True | True | 1 | 0 | 25482.980 | |
59 | 128.40 | Jinpu | 386.400 | True | True | True | 1 | 0 | 25869.380 | |
60 | 130.56 | Gekko | 539.580 | True | True | True | 1 | 0 | 26408.960 | |
61 | 132.72 | Hakaze | 220.455 | True | True | True | 1 | 0 | 26629.415 | |
62 | 134.88 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 27092.405 | |
63 | 137.04 | Hakaze | 220.455 | True | True | True | 1 | 0 | 27312.860 | |
64 | 139.20 | Shifu | 386.400 | True | True | True | 1 | 0 | 27699.260 | |
65 | 141.36 | Kasha | 539.580 | True | True | True | 1 | 0 | 28238.840 | |
66 | 143.52 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 29186.900 |
plot_potency(df4_ext, truncate_actions=True)
Interestingly enough, the average potency this long into the encounter is actually higher than after the opener.
This opener used Meikyo Shisui pre-pull to get buffs/debuffs up faster and was second in pps.
sam = Samurai()
n_targets = 1
sam.meikyo_shisui()
actions = [('Jinpu'), ('Shifu'), ('Yukikaze'),
('Higanbana'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka'),
('Hakaze'), ('Yukikaze'), ('Higanbana'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Jinpu'), ('Gekko', 'Meikyo Shisui'),
('Yukikaze'), ('Midare Setsugekka'), ('Gekko'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Jinpu'), ('Gekko'),
('Midare Setsugekka'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Hakaze'), ('Jinpu'), ('Higanbana'), ('Gekko'),
('Hakaze'), ('Yukikaze'),
('Hakaze'), ('Shifu'), ('Kasha'),
('Midare Setsugekka')]
df2_ext, average_potency, pps = sam.parse_rotation(actions)
display(df2_ext)
average potency per GCD = 431.5713043478264
average potency per second = 199.480305466
Time | Weaponskill | Ability | Potency | Jinpu | Shifu | Yukikaze | Higanbana | Kenki | Total Potency | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.00 | Jinpu | 280.000 | False | False | False | 0 | 0 | 280.000 | |
1 | 2.40 | Shifu | 322.000 | True | False | False | 0 | 0 | 602.000 | |
2 | 4.56 | Yukikaze | 391.000 | True | True | False | 0 | 0 | 993.000 | |
3 | 6.72 | Higanbana | 306.360 | True | True | True | 0 | 0 | 1299.360 | |
4 | 8.88 | Hakaze | 220.455 | True | True | True | 1 | 0 | 1519.815 | |
5 | 11.04 | Shifu | 386.400 | True | True | True | 1 | 0 | 1906.215 | |
6 | 13.20 | Kasha | 539.580 | True | True | True | 1 | 0 | 2445.795 | |
7 | 15.36 | Hakaze | 220.455 | True | True | True | 1 | 0 | 2666.250 | |
8 | 17.52 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 3129.240 | |
9 | 19.68 | Hakaze | 220.455 | True | True | True | 1 | 0 | 3349.695 | |
10 | 21.84 | Jinpu | 386.400 | True | True | True | 1 | 0 | 3736.095 | |
11 | 24.00 | Gekko | 539.580 | True | True | True | 1 | 0 | 4275.675 | |
12 | 26.16 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 5223.735 | |
13 | 28.32 | Hakaze | 220.455 | True | True | True | 1 | 0 | 5444.190 | |
14 | 30.48 | Shifu | 386.400 | True | True | True | 1 | 0 | 5830.590 | |
15 | 32.64 | Kasha | 539.580 | True | True | True | 1 | 0 | 6370.170 | |
16 | 34.80 | Hakaze | 220.455 | True | True | True | 1 | 0 | 6590.625 | |
17 | 36.96 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 7053.615 | |
18 | 39.12 | Hakaze | 220.455 | True | True | True | 1 | 0 | 7274.070 | |
19 | 41.28 | Jinpu | 386.400 | True | True | True | 1 | 0 | 7660.470 | |
20 | 43.44 | Gekko | 539.580 | True | True | True | 1 | 0 | 8200.050 | |
21 | 45.60 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 9148.110 | |
22 | 47.76 | Hakaze | 220.455 | True | True | True | 1 | 0 | 9368.565 | |
23 | 49.92 | Shifu | 386.400 | True | True | True | 1 | 0 | 9754.965 | |
24 | 52.08 | Kasha | 539.580 | True | True | True | 1 | 0 | 10294.545 | |
25 | 54.24 | Hakaze | 220.455 | True | True | True | 1 | 0 | 10515.000 | |
26 | 56.40 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 10977.990 | |
27 | 58.56 | Hakaze | 220.455 | True | True | True | 1 | 0 | 11198.445 | |
28 | 60.72 | Jinpu | 386.400 | True | True | True | 1 | 0 | 11584.845 | |
29 | 62.88 | Gekko | 539.580 | True | True | True | 1 | 0 | 12124.425 | |
30 | 65.04 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 13072.485 | |
31 | 67.20 | Hakaze | 220.455 | True | True | True | 1 | 0 | 13292.940 | |
32 | 69.36 | Yukikaze | 434.010 | True | True | True | 0 | 0 | 13726.950 | |
33 | 71.52 | Higanbana | 306.360 | True | True | True | 0 | 0 | 14033.310 | |
34 | 73.68 | Hakaze | 220.455 | True | True | True | 1 | 0 | 14253.765 | |
35 | 75.84 | Shifu | 386.400 | True | True | True | 1 | 0 | 14640.165 | |
36 | 78.00 | Kasha | 539.580 | True | True | True | 1 | 0 | 15179.745 | |
37 | 80.16 | Hakaze | 220.455 | True | True | True | 1 | 0 | 15400.200 | |
38 | 82.32 | Jinpu | 386.400 | True | True | True | 1 | 0 | 15786.600 | |
39 | 84.48 | Gekko | Meikyo Shisui | 539.580 | True | True | True | 1 | 0 | 16326.180 |
40 | 86.64 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 16789.170 | |
41 | 88.80 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 17737.230 | |
42 | 90.96 | Gekko | 539.580 | True | True | True | 1 | 0 | 18276.810 | |
43 | 93.12 | Kasha | 539.580 | True | True | True | 1 | 0 | 18816.390 | |
44 | 95.28 | Hakaze | 220.455 | True | True | True | 1 | 0 | 19036.845 | |
45 | 97.44 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 19499.835 | |
46 | 99.60 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 20447.895 | |
47 | 101.76 | Hakaze | 220.455 | True | True | True | 1 | 0 | 20668.350 | |
48 | 103.92 | Shifu | 386.400 | True | True | True | 1 | 0 | 21054.750 | |
49 | 106.08 | Kasha | 539.580 | True | True | True | 1 | 0 | 21594.330 | |
50 | 108.24 | Hakaze | 220.455 | True | True | True | 1 | 0 | 21814.785 | |
51 | 110.40 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 22277.775 | |
52 | 112.56 | Hakaze | 220.455 | False | True | True | 1 | 0 | 22498.230 | |
53 | 114.72 | Jinpu | 386.400 | False | True | True | 1 | 0 | 22884.630 | |
54 | 116.88 | Gekko | 539.580 | True | True | True | 1 | 0 | 23424.210 | |
55 | 119.04 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 24372.270 | |
56 | 121.20 | Hakaze | 220.455 | True | True | True | 1 | 0 | 24592.725 | |
57 | 123.36 | Shifu | 386.400 | True | True | True | 1 | 0 | 24979.125 | |
58 | 125.52 | Kasha | 539.580 | True | True | True | 1 | 0 | 25518.705 | |
59 | 127.68 | Hakaze | 220.455 | True | True | True | 1 | 0 | 25739.160 | |
60 | 129.84 | Jinpu | 386.400 | True | True | True | 1 | 0 | 26125.560 | |
61 | 132.00 | Higanbana | 335.340 | True | True | True | 1 | 0 | 26460.900 | |
62 | 134.16 | Gekko | 539.580 | True | True | True | 1 | 0 | 27000.480 | |
63 | 136.32 | Hakaze | 220.455 | True | True | True | 1 | 0 | 27220.935 | |
64 | 138.48 | Yukikaze | 462.990 | True | True | True | 1 | 0 | 27683.925 | |
65 | 140.64 | Hakaze | 220.455 | True | True | True | 1 | 0 | 27904.380 | |
66 | 142.80 | Shifu | 386.400 | True | True | True | 1 | 0 | 28290.780 | |
67 | 144.96 | Kasha | 539.580 | True | True | True | 1 | 0 | 28830.360 | |
68 | 147.12 | Midare Setsugekka | 948.060 | True | True | True | 1 | 0 | 29778.420 |
compare_potencies([df4_ext, df2_ext], labels=['With Opener 5', 'With Opener 3'])
Again, with only weaponskills to play with, one buff, and one DoT, there is a limited degree of complexity in the single target rotation at level 50.