Hercules
Hercules copied to clipboard
2-2 jobs skill rebalance (Part 3 - Monk) (2018 patch/Renewal)
Dependency
This PR depends on #3230, all commits from #3230 are included in this one. The first commit original to this PR is:
change size penalty of Knuckles for Renewal
Pull Request Prelude
- [x] I have followed proper Hercules code styling.
- [x] I have read and understood the contribution guidelines before making this PR.
- [x] I am aware that this PR may be closed if the above-mentioned criteria are not fulfilled.
Draft Reason
Waiting for the previous parts to be merged.
Changes Proposed
The main purpose of this PR is to introduce the rebalance of Monk job skills. This change affects Renewal-only.
On official servers this came along with rebalances of 1st, 2nd jobs and transclass too. I am working in additional PRs for the remaining 2-2, including bard/dancer, being in separate PRs in order to keep those PRs in a reasonable size.
The implementation in this PR is based on kRO and kRO zero patch notes, iRO Wiki, rAthena and divine pride info, along with some in-game testing. I can't say everything is 100% accurate because there were discrepancies between different sources, and I could not test everything in kRO, but should be quite close.
I won't list all the rebalance changes in the PR description, but it may be checked in each commit text. Also, the commits are in the same order as they appear in the references below.
Additionally, MO_INVESTIGATE
has a separate fix for how its damage works in Renewal. This is made in a separate commit because iRO Wiki reports this formula since 2016, so it is probably a bug that we didn't know.
Affected skills
- MO_TRIPLEATTACK (Raging Trifecta Blow)
- MO_CHAINCOMBO (Raging Quadruple Blow)
- MO_COMBOFINISH (Raging Thrust)
- MO_EXTREMITYFIST (Asura Strike)
- MO_BLADESTOP (Root)
- MO_INVESTIGATE (Occult Impact)
- MO_FINGEROFFENSIVE (Throw Spirit Sphere)
- MO_ABSORBSPIRITS (Absorb Spirit Sphere)
Other effects
- Changed size penalty for Knuckles (Renewal only)
References:
Issues addressed: Part of #2727
MO_FINGEROFFENSIVE is broken or I'm just mistaken? Is this deliberately implemented ratio /= skill->get_num(MO_FINGEROFFENSIVE, skill_lv);
If that line of code is implemented Finger Offensive only does 1 hit instead of 5 and the damage is so low. Can you also revisit MO_INVESTIGATE as I'm not convinced that its damage would be just 2k+ only against a high-def and vit enemy like an ancient sea horse (2182 MobID)
Thanks for checking.
I double checked in kRO Zero sakray, here are my findings:
MO_FINGEROFFENSIVE
(Fixed)
I think there is indeed a small mistake in it. I shouldn't divide the ratio itself, but the damage. But, the damage is close to right. I will try to find what is causing this extra damage to slipping in, but the skill will not be buffed.
Unfortunately they had changed the skill ratio in Zero:
- from: 800 / 1000 / 1200 / 1400 / 1600
- to: 1600 / 2000 / 2400 / 2800 / 3200
But we can still compare the overall behavior.
Using a Monk Lv 56/11 with:
- Iron Fist Lv1 (Zero skill tree is different, Lv1 is enough)
- STR 4
- DEX 2
- LUK 1
This gives base StatusATK = 18, and 3 Mastery ATK from Iron Fist, and each sphere gives +3 ATK too
I've got the following results against DUMMY_10
:
- with 1 Sphere, Throw Sphere Lv1 (SkillRatio = 1600), Damage = 667 (5x 133)
- with 1 Sphere, Throw Sphere Lv2 (SkillRatio = 2000), Damage = 835 (5x 167)
- with 1 Sphere, Throw Sphere Lv3 (SkillRatio = 2400), Damage = 1000 (5x 200)
- with 2 Sphere, Throw Sphere Lv1 (SkillRatio = 1600), Damage = 715 (5x 143)
These values are correct following iRO Wiki formula: https://irowiki.org/wiki/ATK
StatusATK = 18
Mastery = 6 (with 1 sphere)
ATK = 18 * 2 + 6 = 42
SkillDamage(Lv1) = 1600 * 42 / 100 = 672
SkillDamage(Lv2) = 2000 * 42 / 100 = 840
SkillDamage(Lv3) = 2400 * 42 / 100 = 1008
// (Enemy Lv10 = 5 def)
FinalDamage(Lv1) = 672 - 5 = 667
FinalDamage(Lv2) = 840 - 5 = 835
FinalDamage(Lv3) = 1008 - 5 = 1003 (!!)
Now, this damage is given in a bundle of 5 hits. So we have to FinalDamage/5
and apply it 5 times. Thus: (Always rounding down)
HitDamage(Lv1) = 667 / 5 = 133
HitDamage(Lv2) = 835 / 5 = 167
HitDamage(Lv3) = 1003 / 5 = 200
Note that Lv3 damage will go down to 1000 (from 1003) because of the division. This will be delivered as 5 hits of 200 (it is a single hit, but the damage is applied 5 times).
This was for Zero. For main, we just need to change the Ratio:
StatusATK = 18
Mastery = 6 (with 1 sphere)
ATK = 18 * 2 + 6 = 42
SkillDamage(Lv1) = 800 * 42 / 100 = 336
// (Enemy Lv10 = 5 def)
FinalDamage(Lv1) = 336 - 5 = 331
HitDamage(Lv1) = 331 / 5 = 66
On the current code, it is giving a damage of 5x 81 instead of 5x 66.
So yeah, something is still wrong, but the damage should actually be lower, not higher
MO_INVESTIGATE
(Fixed)
I have no way to validate it against a high defense target, but I could do some extra tests against some weak mobs (Pupa / Condor / Poring), and looks like:
- The initial ATK gets boosted by Target's HardDEF.
ATK + HardDEF/2
- it should ignore Target's SoftDEF
- it should ignore all sorts of Mastery bonuses AND spheres
- Iron Hand which gives bonus based on the weapon is also ignored
So FinalDamage = (ATK + (Target HardDEF/2)) * SkillRatio
(bypassing the step of reducing SoftDEF)
A few in-game tests:
- DUMMY_10 (Test Egg, 0 Hard DEF)
- Lv1. Damage: 36
(18 * 2 + 0 /* Mastery */ + 0 /* Hard DEF / 2 */) * 100%
= 36 - Lv2. Damage: 72
(18 * 2 + 0 /* Mastery */ + 0 /* Hard DEF / 2 */) * 200%
= 72
- Lv1. Damage: 36
- PORING (2 Hard DEF)
- Lv1. Damage: 37
(18 * 2 + 0 /* Mastery */ + 1 /* Hard DEF / 2 */) * 100%
= 37 - Lv2. Damage: 74
(18 * 2 + 0 /* Mastery */ + 1 /* Hard DEF / 2 */) * 200%
= 74
- Lv1. Damage: 37
- PUPA (24 Hard DEF)
- Lv1. Damage: 48
(18 * 2 + 0 /* Mastery */ + 12 /* Hard DEF / 2 */) * 100%
= 48 - Lv2. Damage: 96
(18 * 2 + 0 /* Mastery */ + 12 /* Hard DEF / 2 */) * 200%
= 96
- Lv1. Damage: 48
- CONDOR (7 Hard DEF)
- Lv1. Damage: 39
(18 * 2 + 0 /* Mastery */ + 3 /* Hard DEF / 2 */) * 100%
= 39 - Lv2. Damage: 78
(18 * 2 + 0 /* Mastery */ + 3 /* Hard DEF / 2 */) * 200%
= 78
- Lv1. Damage: 39
Updated the PR with fixes for MO_FINGEROFFENSIVE
and MO_INVESTIGATE
as described in the previous comment.