-
Notifications
You must be signed in to change notification settings - Fork 758
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2-2 jobs skill rebalance - Bard/Dancer (2018 Patch/Renewal) #3279
2-2 jobs skill rebalance - Bard/Dancer (2018 Patch/Renewal) #3279
Conversation
#ifdef RENEWAL | ||
case SC_POEMBRAGI: | ||
// val1 = skill lv | ||
val2 = val1 * 2; // Cast time reduction |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have been wondering whether we could/should/want to move these vals to SkillData2
and SkillData3
(yes, this would need to be created) instead of defining them here. (For every skill, not only bragi)
* | ||
* - @TODO: Document other possible flag values | ||
*/ | ||
static void skill_castend_nodamage_id_sc_song(struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tried to start making the idea of "separate function for each skill" a thing here, since most dance/songs are very similar. But I ended up with:
- this one having a if for lullaby
skill_castend_nodamage_id_ugly_dance
having a duplicated code for most of it- the caller function needing to give the target
I am open for suggestions on how I could improve that, I had a few random thoughts but didn't try too much:
- Moving chance to SkillData2 (but except for 1 case, it is always 100%...) -- solves the lullby part, but not ugly dance
- Making more functions, with their exclusive logic and those would call this one. Something like: -- solves both, but creates more functions
- song_friend_sc --> sc_song w/ Party + chance = 100%
- song_enemy_sc --> sc_song w/ enemy + chance = 100%
- song_lullaby --> sc_song w/ enemy + chance = 15%
- song_ugly_dance --> sc_song w/ enemy + special logic for flag 1
example:
static void skill_castend_nodamage_id_song_splash(struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag)
{
// ... logic for (flag & 1) == 0 ... (set used song + splash on targets)
}
static void skill_castend_nodamage_id_sc_song_on_party(struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag)
{
if ((flag & 1) == 0) {
skill_castend_nodamage_id_song_splash(src, bl, skill_id, skill_lv, tick, flag | BCT_PARTY);
} else {
enum sc_type sc = skill->get_sc_type(skill_id);
sc_start(src, bl, sc, 100, skill_lv, skill->get_time(skill_id, skill_lv), skill_id);
}
}
static void skill_castend_nodamage_id_sc_song_on_enemy(struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag)
{
if ((flag & 1) == 0) {
skill_castend_nodamage_id_song_splash(src, bl, skill_id, skill_lv, tick, flag | BCT_ENEMY);
} else {
enum sc_type sc = skill->get_sc_type(skill_id);
sc_start(src, bl, sc, 100, skill_lv, skill->get_time(skill_id, skill_lv), skill_id);
}
}
static void skill_castend_nodamage_id_lullaby(struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag)
{
if ((flag & 1) == 0) {
skill_castend_nodamage_id_song_splash(src, bl, skill_id, skill_lv, tick, flag | BCT_ENEMY);
} else {
enum sc_type sc = skill->get_sc_type(skill_id);
sc_start(src, bl, sc, 15, skill_lv, skill->get_time(skill_id, skill_lv), skill_id);
}
}
static void skill_castend_nodamage_id_ugly_dance(struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag)
{
if ((flag & 1) == 0) {
skill_castend_nodamage_id_song_splash(src, bl, skill_id, skill_lv, tick, flag | BCT_ENEMY);
} else {
int chance = skill->get_time2(skill_id, skill_lv);
if (rnd() % 100 < chance) {
int drain_rate = skill->get_time(skill_id, skill_lv);
int drain_amount = status_get_max_sp(bl) * drain_rate / 100;
status_zap(bl, 0, drain_amount);
}
}
}
// after rebalance, boss monsters does give more EXP, but "MVP" exp is not increased | ||
if (sd->sc.data[SC_RICHMANKIM] != NULL && src->type == BL_MOB && (flags & EXP_FLAG_MVP) == 0) { | ||
buff_ratio += sd->sc.data[SC_RICHMANKIM]->val1; | ||
// jexp is boosted by both buff_ration AND buff_job_ratio, so we should not use buff_job_ratio here |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@skyleo can you check if this part about buff_ratio / buff_job_ratio is correct on the general exp calc? I find it very weird that job exp boost is buff_ratio + buff_job_ratio: (near the end of the function)
bexp += apply_percentrate64(bexp, buff_ratio, 100);
jexp += apply_percentrate64(jexp, buff_ratio + buff_job_ratio, 100);
maybe @hemagx remembers something... but this change is from 8 years ago 😅
This line was introduced on #1328
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A bit odd since this means the bonuses from SC_CASH_PLUSEXP and SC_OVERLAPEXPUP are applied twice for job exp.
Also since when does SC_RICHMANKIM affect players? The experience calculation for SC_RICHMANKIM is in mob.c and basically only mobs that are inside Richmankim, will get SC_RICHMANKIM on them and thus give more experience.
From briefly reading iro wiki it seems that this hasn't changed. I suggest you introduce your change in mob.c at the Experience Calculation around line 2580 in function mob_dead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I found odd that SC_CASH_PLUSEXP and SC_OVERLAPEXPUP applies twice, I did not test it in-game to check, but looks like a bug to me... not exactly a re-balance issue though.
Regarding RICHMANKIM:
After Renewal re-balance, SC_RICHMANKIM is a player buff just like Angelus/etc, there is no longer ground effects (monsters does not get SC_RICHMANKIM now).
From my in-game tests, the EXP is applied per-player.
Consider the following examples for a party of 2 players with even sharing, killing a monster where penalty is applied equally to both members (to make explanation simpler)
Example 1: Player A and Player B NOT buffed
- Result: Player A and Player B gets the same amount of EXP
Example 2: Player A Buffed / Player B NOT buffed
- Result: Player A always gets more EXP than Player B (regardless of who performed the kill)
Example 3: Player A and Player B Buffed
- Result: Player A and Player B gets the same amount of EXP (increased by the effect)
And MVP exp does not get boosted.
I did try to keep it in mob.c, since we are talking about mob exp, but doing it there is... complicated. EXP at mob_dead
did not consider the party EXP split yet, and since my tests have shown that a non-buffed player will get less EXP, I would need to change the party sharing code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, okay. Sounds good.
3458b6e
to
cd17cb4
Compare
if(pc_issit(tsd) || !unit->can_move(&tsd->bl)) | ||
return 0; | ||
|
||
uint16 skill_lv = pc->checkskill(tsd, skill_id); | ||
#ifdef RENEWAL // In Renewal, partner also gets the requirements consumed, so we must check it |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@skyleo another question, is it correct that in Pre-RE, when we cast an Ensemble skill, the partner doesn't pay the initial SP requirement?
Example: Ring Nibelungen costs 50 SP to be cast + 1 SP/3 second.
If player A casts it, and player B is forced to join it, then:
- Player A pays 50 SP
- After 3 seconds: Player A + Player B pays 1 SP
- ...
Is that right for Pre-RE? or should Player B also pay 50 SP to start the ensemble skill? In Renewal after rebalance, I could observe that this is the behavior, but the existing code didn't consume the requirement from Player B.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah this seems to be the behavior in Pre-RE from what I've seen in Ghidra.
Only one of them pays the initial cost.
(Although that part was kind of hard to read.)
cd17cb4
to
b224d41
Compare
@violent01 thanks for checking, fixed the missing values |
4d6da45
to
c8e357d
Compare
Song effects are now grouped and songs of the same group doesn't overlap with each other. Activating a new effect of the same group ends other existing effects. There are 3 groups: 1. Bard songs -- song buffs exclusive to bards 2. Dancer songs -- song buffs exclusive to dancers 3. Ensemble songs -- song buffs exclusive to ensemble From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
…ging Arrow) -Damage formula changed - New: [110 + (Skill Level x 40)]% x 2 hits - SP cost changed - Old: (Skill Level × 2) - 1 - New: 12 at all skill levels - Casting time reduced: 1.5s -> 0.5s (Based on DivinePride data see more below) - Fixed Cast Time of 0.3s remains untouched - Variable Cast Time reduced 1.2s -> 0.2s - Global skill delay added: 0.3s The Casting Time value is presented differently in each source I was looking at: - Official notes: Variable cast time reduce from 1.5s to 0.5s but we never had *Variable* Cast Time in 1.5s (only 1.2s Variable + 0.3 Fixed) - Divine Pride: 0.2s Variable + 0.3s Fixed (total 0.5s) - iRO Wiki: 0.5s Variable only From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
- Add effect: Attack Speed +(Skill_Lv)% with Musical Instruments - Add effect: Max SP +(Skill_Lv)% - No longer gives bonuses to song effects From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
- Add effect: Max SP +(Skill_Lv)% - Add effect: When using Whips, CRI +(Skill_Lv) - No longer gives bonuses to dance effects From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
- Global skill delay reduced: 4s -> 0.3s - 4s Cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
- Added 0.3s of global skill delay - Added 10s of cooldown From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked. - Now causes Neutral Magical damage in a 9x9 area - Can only be used in PvP areas - 0.3s of global delay added - 5s of cooldown added - SP cost changed - Old: 15 + (SkillLv) x 3 - New: 32 + (SkillLv) x 3 From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - Effect formula changed: - Variable cast reduction: (SkillLv)% - Cast delay reduction: (SkillLv x 3)% - Caster stats and Music Lessons no longer affects the formula - Effect duration changed: 180s -> 60s - SP Cost changed: - Old: 35 + (SkillLv x 5) - New: 60 + (SkillLv x 5) - 1s casting time added - 0.5s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - Effect formula changed: - ASPD: - when SkillLv < 10: +(1 + ((SkillLv - 1) x 2))% - when SkillLv = 10: +20% - Caster stats and Music Lessons no longer affects the formula - Effect duration changed: 180s -> 60s - SP Cost changed: - Old: 35 + (SkillLv x 5) - New: 60 + (SkillLv x 5) - 1s casting time added - 0.5s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - Effect changes: - MaxHP increase formula changed: - SkillLv < 10: (SkillLv + 9)% - SkillLv = 10: 20% - Removed HP Recovery effect - Added effect: HP Regen Rate increase by (SkillLv x 2)% - Caster stats and Music Lessons no longer affects the formula - Effect duration changed: 180s -> 60s - SP Cost changed: - Old: 35 + (SkillLv x 5) - New: 60 + (SkillLv x 5) - 1s casting time added - 0.5s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - Effect formula changed: - Flee increase: - when SkillLv < 10: +(18 + SkillLv x 2) - when SkillLv = 10: +40 - Perfect Dodge increase: (SkillLv + 1) / 2 - Caster stats and Music Lessons no longer affects the formula - Effect duration changed: 180s -> 60s - SP Cost changed: - Old: 20 + (SkillLv x 4) - New: 20 + (SkillLv x 2) - 1s casting time added - 0.5s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a single AoE effect - It no longer keeps the "performance running" - SP drain amount changed: (10 + 2 * (SkillLv))% - SP Cost changed: - Old: 20 + (SkillLv x 3) - New: 32 + (SkillLv x 3) - 0.3s global delay added - 5s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a single AoE effect which causes a SC on enemies - It no longer keeps the "performance running" - Effect formula changed: - Attack Speed reduction: ((SkillLv x 3) + DEX / 15)% - Move Speed reduction: ((SkillLv x 2) + AGI / 20)% - Note: According to rA, dividing by 15 and 20 was already the right values for RE. And this does seem to match the rebalance formula (at least, is close enough) - Can only be used in PvP areas - 0.5s of global delay added - 1s casting time added - 20s of cooldown added - SP cost changed - Old: 25 + (SkillLv) x 3 - New: 35 + (SkillLv) x 3 - Area of Effect increased: 7x7 -> 9x9 From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - Effect formula changed: - Max SP Boost: - SkillLv < 10: (9 + SkillLv)% - SkillLv = 10: 20% - SP Cost reduction: (SkillLv + 5)% - Caster stats and Dance Lessons no longer boosts the effects - SP Cost changed: - Old: 35 + (SkillLv x 5) - New: 57 + (SkillLv x 3) - 1s casting time added - 0.5s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - Effect changed: - Crit boost formula changed: +(SkillLv)% - Added effect: Crit damage +(SkillLv x 2)% - Caster stats and Dance Lessons no longer boosts the effects - SP Cost changed: - Old: 40 + (SkillLv x 3) - New: 35 + (SkillLv x 5) - 1s casting time added - 0.5s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - Effect formula changed: - HIT boost: +(SkillLv x 4) - Caster stats and Dance Lessons no longer boosts the effects - SP Cost changed: - Old: 20 + (SkillLv x 2) - New: 30 + (SkillLv x 3) - 1s casting time added - 0.5s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
- Add SC_ENSEMBLEFATIGUE effect after ensemble skills (RE-only) After using an ensemble skill, ensemble fatigue starts on both performers - Ensemble skills now consumes requirements from partner too From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
this allows us to easily expand it with new flags
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - EXP Boost formula changed: - Old: +(25 + SkillLv x 11)% - New: +(10 + SkillLv x 10)% - 1s casting time added - 0.3s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - Effect changed. Now gives a random buff to user and party members: - ASPD +20% - ATK +20% - MATK +20% - MaxHP +30% - MaxSP +30% - All Stats +15 - Hit +50 - Flee +50 - Reduce SP consumption of skills by 30% - Increase HP Recovery by 100% - Increase SP Recovery by 100% - SP Cost changed: - Old: 35 + (SkillLv x 3) - New: 68 - (SkillLv x 4) - 1s casting time added - 0.3s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - Effect formula changed: - Old: - Elemental Resistance: (30 + SkillLv x 10)% - Status Effect Resistance: (SkillLv x 10)% - New: - Elemental Resistance: (SkillLv x 3)% - Status Effect Resistance: (SkillLv x 5)% - SP Cost changed: - Old: 20 on all skill levels - New: 36 + (SkillLv x 4) - 1s casting time added - 0.3s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - SP Cost increased: 10 -> 70 - 1s casting time added - 0.3s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It now casts a single AoE effect in a 9x9 area - It no longer uses ground units nor keeps the "performance running" - SP Cost increased: 30 -> 120 - 1s casting time added - 0.3s global delay added - 60s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a single AoE effect - It no longer keeps the "performance running" - Effect changed: Inflicts confusion and blocks use of skill in all entities (Except performers) - Can only be used in PvP areas - 0.3s of global delay added - 1s casting time added - 20s of cooldown added - SP cost increased: 15 -> 180 - Area of Effect increased: 7x7 -> 9x9 From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a single AoE effect - It no longer keeps the "performance running" - Effect changed: - Inflicts sleep in enemies around user - INT no longer affects the chance - 0.3s of global delay added - 1s casting time added - 20s of cooldown added - SP cost increased: 20 -> 40 - Area of Effect increased: 7x7 -> 9x9 From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked: - It is now a screen-wide skill (31x31) that gives the SC to all party members - It no longer uses ground units nor keeps the "performance running" - Effect formula changed: - Old: - Damage Boost: 125 + (SkillLv x 25) (depending on size) - DEF Boost: SkillLv x 10 - New: - ATK Boost: 15 + (SkillLv x 5) (ATK2 / I am making it as BATK / equip atk) - DEF Boost: SkillLv x 15 - SP Cost increased: - Old: 35 + (SkillLv x 3) - New: 46 + (SkillLv x 4) - 1s casting time added - 0.3s global delay added - 20s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Skill reworked. It now concedes a SC (SC_ADAPTATION) which reduces the SP consumption of performance skills by 20%. - 300s cooldown added - 0.3s of global skill delay added - SP cost increased: 1 -> 10 From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
From massive skills rebalance (1st/2nd/transclass) (2018.11.28)
Since RE no longer has "song areas", this check does not make sense for RE
c8e357d
to
95942f0
Compare
Pull Request Prelude
Changes Proposed
The main purpose of this PR is to introduce the rebalance of Bard/Dancer job skills. This change affects Renewal-only.
On official servers this came along with rebalances of 1st, 2nd jobs and transclass too.
I am not sure whether this could be moved like that, because some skills from transclasses will not play well with the rebalanced ones.
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.
Notes
Affected skills
References:
Issues addressed:
Part of #2727