From 918e19bf78ea476010f61f0776f4b4b96c72e857 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 18 Jun 2023 21:54:47 -0300 Subject: [PATCH 01/14] Rebalance of SM_MAGNUM - After skill delay reduced (2 seconds -> 0.5 seconds) - (already implemented) Added 2 seconds of Cooldown From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 1c6424691e9..d0a5533beb3 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -424,7 +424,7 @@ skill_db: ( } SplashRange: 2 KnockBackTiles: 2 - AfterCastActDelay: 2000 + AfterCastActDelay: 500 CoolDown: 2000 SkillData2: 10000 FixedCastTime: 0 From fa43934bebaca459eca2d2e629feea60de3ef956 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 25 Jun 2023 17:02:25 -0300 Subject: [PATCH 02/14] Rebalance of MC_LOUD (Crazy Uproar) - Change affected players (Caster-only -> All party members in screen range) - Effect changed: - Str +4 (kept as is) - Extra ATK +30 (new effect) - CastTime: None -> 1 second - FixedCastTime: None -> 0.5 seconds - CoolDown: None -> 30 seconds From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/sc_config.conf | 1 + db/re/skill_db.conf | 8 ++++-- src/map/battle.c | 2 ++ src/map/pc.h | 2 +- src/map/skill.c | 5 ++++ src/map/status.c | 63 +++++++++++++++++++++++++++++++++++++------- src/map/status.h | 2 ++ 7 files changed, 70 insertions(+), 13 deletions(-) diff --git a/db/re/sc_config.conf b/db/re/sc_config.conf index b2254b8c9ff..2043e6f5135 100644 --- a/db/re/sc_config.conf +++ b/db/re/sc_config.conf @@ -390,6 +390,7 @@ SC_SHOUT: { } CalcFlags: { Str: true + Batk: true } Icon: "SI_SHOUT" Skill: "MC_LOUD" diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index d0a5533beb3..1b6777fa57a 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -5653,9 +5653,13 @@ skill_db: ( AttackType: "Weapon" DamageType: { NoDamage: true + SplashArea: true } - SkillData1: 300000 - FixedCastTime: 0 + SplashRange: -1 + SkillData1: 300_000 // SC duration + CastTime: 1_000 + FixedCastTime: 500 + CoolDown: 30_000 Requirements: { SPCost: 8 } diff --git a/src/map/battle.c b/src/map/battle.c index 7758e242a76..4eaf9abbb9f 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -504,6 +504,8 @@ static int64 battle_calc_weapon_damage(struct block_list *src, struct block_list if ( sd->battle_status.equip_atk != 0 ) eatk = sd->base_status.equip_atk; + eatk += sd->battle_status.buff_extra_batk; + if ( sd->bonus.atk_rate ) damage += damage * sd->bonus.atk_rate / 100; } diff --git a/src/map/pc.h b/src/map/pc.h index 25ca09daf97..78dbc5a5582 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -783,7 +783,7 @@ END_ZEROED_BLOCK; // clientside display macros (values to the left/right of the "+") #ifdef RENEWAL #define pc_leftside_atk(sd) ((sd)->battle_status.batk) - #define pc_rightside_atk(sd) ((sd)->battle_status.rhw.atk + (sd)->battle_status.lhw.atk + (sd)->battle_status.rhw.atk2 + (sd)->battle_status.lhw.atk2 + (sd)->battle_status.equip_atk ) + #define pc_rightside_atk(sd) ((sd)->battle_status.rhw.atk + (sd)->battle_status.lhw.atk + (sd)->battle_status.rhw.atk2 + (sd)->battle_status.lhw.atk2 + (sd)->battle_status.equip_atk + (sd)->battle_status.buff_extra_batk) #define pc_leftside_def(sd) ((sd)->battle_status.def2) #define pc_rightside_def(sd) ((sd)->battle_status.def) #define pc_leftside_mdef(sd) ((sd)->battle_status.mdef2) diff --git a/src/map/skill.c b/src/map/skill.c index 5f23103cebf..40a92929571 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -7327,7 +7327,9 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * case CR_REFLECTSHIELD: case MS_REFLECTSHIELD: case AS_POISONREACT: +#ifndef RENEWAL case MC_LOUD: +#endif case MG_ENERGYCOAT: case MO_EXPLOSIONSPIRITS: case MO_STEELBODY: @@ -7882,6 +7884,9 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * } break; +#ifdef RENEWAL + case MC_LOUD: +#endif case AL_ANGELUS: case PR_MAGNIFICAT: case PR_GLORIA: diff --git a/src/map/status.c b/src/map/status.c index 476032fb30f..fbb790fa511 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -3079,14 +3079,20 @@ static void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag ; } - if(flag&SCB_BATK && bst->batk) { - st->batk = status->base_atk(bl,st); - temp = bst->batk - status->base_atk(bl,bst); - if (temp) { - temp += st->batk; - st->batk = cap_value(temp, battle_config.batk_min, battle_config.batk_max); + if (flag & SCB_BATK) { + if (bst->batk != 0) { + st->batk = status->base_atk(bl,st); + temp = bst->batk - status->base_atk(bl,bst); + if (temp != 0) { + temp += st->batk; + st->batk = cap_value(temp, battle_config.batk_min, battle_config.batk_max); + } + st->batk = status->calc_batk(bl, sc, st->batk, true); } - st->batk = status->calc_batk(bl, sc, st->batk, true); + +#ifdef RENEWAL + st->buff_extra_batk = status->calc_buff_extra_batk(bl, sc); +#endif } if(flag&SCB_WATK) { @@ -3534,7 +3540,7 @@ static void status_calc_bl_(struct block_list *bl, enum scb_flag flag, enum e_st if(bst.sp != st->sp) clif->updatestatus(sd,SP_SP); #ifdef RENEWAL - if(bst.equip_atk != st->equip_atk) + if(bst.equip_atk != st->equip_atk || bst.buff_extra_batk != st->buff_extra_batk) clif->updatestatus(sd,SP_ATK2); #endif } else if( bl->type == BL_HOM ) { @@ -3943,8 +3949,8 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang str += 5; if(sc->data[SC_LEADERSHIP]) str += sc->data[SC_LEADERSHIP]->val1; - if(sc->data[SC_SHOUT]) - str += 4; + if (sc->data[SC_SHOUT] != NULL) + str += sc->data[SC_SHOUT]->val1; if(sc->data[SC_TRUESIGHT]) str += 5; if(sc->data[SC_STRUP]) @@ -4398,6 +4404,36 @@ static int status_calc_batk(struct block_list *bl, struct status_change *sc, int return cap_value(batk, battle_config.batk_min, battle_config.batk_max); } +/** + * Calculates bl's Extra ATK gains from Buffs. + * + * These are very specific bonus from SCs where: + * - They show in status window ATK right side (after the + sign) + * - They are given by SCs, but they work like equipment's ATK bonus + * - They are not linked to the weapon attack value + * + * @param bl unit whose status is being calculated + * @param sc unit's SC list + * @returns Value of Extra ATK conceded by buffs + */ +static int status_calc_buff_extra_batk(struct block_list *bl, struct status_change *sc) +{ + nullpo_ret(bl); + + if(sc == NULL || sc->count == 0) + return 0; + + int batk = 0; + +#ifdef RENEWAL + // In-game Tests (and iRO wiki) suggests SC_SHOUT ATK bonus is counted as Extra ATK + if (sc->data[SC_SHOUT] != NULL) + batk += sc->data[SC_SHOUT]->val2; +#endif + + return cap_value(batk, 0, battle_config.batk_max); +} + static int status_calc_watk(struct block_list *bl, struct status_change *sc, int watk, bool viewable) { nullpo_ret(bl); @@ -8134,6 +8170,12 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl if (vd) vd->dead_sit = 1; total_tick = INFINITE_DURATION; break; + case SC_SHOUT: + val1 = 4; // STR bonus +#ifdef RENEWAL + val2 = 30; // Extra ATK bonus +#endif + break; case SC_CONCENTRATION: val2 = 2 + val1; if (sd) { //Store the card-bonus data that should not count in the % @@ -14527,6 +14569,7 @@ void status_defaults(void) status->calc_mdef = status_calc_mdef; status->calc_mdef2 = status_calc_mdef2; status->calc_batk = status_calc_batk; + status->calc_buff_extra_batk = status_calc_buff_extra_batk; status->base_matk = status_base_matk; status->get_weapon_atk = status_get_weapon_atk; status->get_total_mdef = status_get_total_mdef; diff --git a/src/map/status.h b/src/map/status.h index 4cc0fa839e7..23afdd08093 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -1137,6 +1137,7 @@ struct status_data { struct weapon_atk rhw, lhw; //Right Hand/Left Hand Weapon. #ifdef RENEWAL int equip_atk; + int buff_extra_batk; // Extra Base ATK granted by buffs #endif }; @@ -1426,6 +1427,7 @@ struct status_interface { defType (*calc_mdef) (struct block_list *bl, struct status_change *sc, int mdef, bool viewable); short (*calc_mdef2) (struct block_list *bl, struct status_change *sc, int mdef2, bool viewable); int (*calc_batk)(struct block_list *bl, struct status_change *sc, int batk, bool viewable); + int (*calc_buff_extra_batk)(struct block_list *bl, struct status_change *sc); int (*base_matk) (struct block_list *bl, const struct status_data *st, int level); int (*get_weapon_atk) (struct block_list *src, struct weapon_atk *watk, int flag); int (*get_total_mdef) (struct block_list *src); From 1abd54a0a756813a47713446cdf0ae0d072235d2 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 25 Jun 2023 22:13:58 -0300 Subject: [PATCH 03/14] Rebalance of MG_FIREBOLT (Fire Bolt) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed casting time changed. - Old: (0.4 + (Skill Level × 0.4)) x 0.2 seconds. - New: 0.2 + (Skill Level × 0.1) seconds Variable casting time changed. - Old: (0.4 + (Skill Level × 0.4)) x 0.8 seconds. - New: 0.2 + (Skill Level × 0.3) seconds Global delay of skills changed. - Old: 0.8 + (Skill Level × 0.2) seconds - New: 1.4 seconds at all skill levels. Values based in iRO Wiki From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 55 ++++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 1b6777fa57a..98aed25e44f 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -1043,40 +1043,29 @@ skill_db: ( } InterruptCast: true CastTime: { - Lv1: 640 - Lv2: 960 - Lv3: 1280 - Lv4: 1600 - Lv5: 1920 - Lv6: 2100 - Lv7: 1560 - Lv8: 2880 - Lv9: 3200 - Lv10: 3520 - } - AfterCastActDelay: { - Lv1: 1000 - Lv2: 1200 - Lv3: 1400 - Lv4: 1600 - Lv5: 1800 - Lv6: 2000 - Lv7: 2200 - Lv8: 2400 - Lv9: 2600 - Lv10: 2800 - } + Lv1: 500 + Lv2: 800 + Lv3: 1_100 + Lv4: 1_400 + Lv5: 1_700 + Lv6: 2_000 + Lv7: 2_300 + Lv8: 2_600 + Lv9: 2_900 + Lv10: 3_200 + } + AfterCastActDelay: 1400 FixedCastTime: { - Lv1: 160 - Lv2: 240 - Lv3: 320 - Lv4: 400 - Lv5: 480 - Lv6: 700 - Lv7: 640 - Lv8: 720 - Lv9: 800 - Lv10: 880 + Lv1: 300 + Lv2: 400 + Lv3: 500 + Lv4: 600 + Lv5: 700 + Lv6: 800 + Lv7: 900 + Lv8: 1_000 + Lv9: 1_100 + Lv10: 1_200 } Requirements: { SPCost: { From 280972b5475699a9d5d265309d213b1afbf168d7 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 25 Jun 2023 22:15:20 -0300 Subject: [PATCH 04/14] Rebalance of MG_COLDBOLT (Cold Bolt) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed casting time changed. - Old: (0.4 + (Skill Level × 0.4)) x 0.2 seconds. - New: 0.2 + (Skill Level × 0.1) seconds Variable casting time changed. - Old: (0.4 + (Skill Level × 0.4)) x 0.8 seconds. - New: 0.2 + (Skill Level × 0.3) seconds Global delay of skills changed. - Old: 0.8 + (Skill Level × 0.2) seconds - New: 1.4 seconds at all skill levels. Values based in iRO Wiki From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 53 ++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 32 deletions(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 98aed25e44f..f3970d38da0 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -740,40 +740,29 @@ skill_db: ( } InterruptCast: true CastTime: { - Lv1: 640 - Lv2: 960 - Lv3: 1280 - Lv4: 1600 - Lv5: 1920 - Lv6: 2100 - Lv7: 1560 - Lv8: 2880 - Lv9: 3200 - Lv10: 3520 - } - AfterCastActDelay: { - Lv1: 1000 - Lv2: 1200 - Lv3: 1400 - Lv4: 1600 - Lv5: 1800 - Lv6: 2000 - Lv7: 2200 - Lv8: 2400 - Lv9: 2600 - Lv10: 2800 + Lv1: 500 + Lv2: 800 + Lv3: 1_100 + Lv4: 1_400 + Lv5: 1_700 + Lv6: 2_000 + Lv7: 2_300 + Lv8: 2_600 + Lv9: 2_900 + Lv10: 3_200 } + AfterCastActDelay: 1400 FixedCastTime: { - Lv1: 160 - Lv2: 240 - Lv3: 320 - Lv4: 400 - Lv5: 480 - Lv6: 700 - Lv7: 640 - Lv8: 720 - Lv9: 800 - Lv10: 880 + Lv1: 300 + Lv2: 400 + Lv3: 500 + Lv4: 600 + Lv5: 700 + Lv6: 800 + Lv7: 900 + Lv8: 1_000 + Lv9: 1_100 + Lv10: 1_200 } Requirements: { SPCost: { From cf548bd16eb3bdce7151207b0b8ec90eb0dfca10 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 25 Jun 2023 22:16:03 -0300 Subject: [PATCH 05/14] Rebalance of MG_LIGHTNINGBOLT (Lightining Bolt) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed casting time changed. - Old: (0.4 + (Skill Level × 0.4)) x 0.2 seconds. - New: 0.2 + (Skill Level × 0.1) seconds Variable casting time changed. - Old: (0.4 + (Skill Level × 0.4)) x 0.8 seconds. - New: 0.2 + (Skill Level × 0.3) seconds Global delay of skills changed. - Old: 0.8 + (Skill Level × 0.2) seconds - New: 1.4 seconds at all skill levels. Values based in iRO Wiki From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 53 ++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 32 deletions(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index f3970d38da0..567accbe7f5 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -1102,40 +1102,29 @@ skill_db: ( } InterruptCast: true CastTime: { - Lv1: 640 - Lv2: 960 - Lv3: 1280 - Lv4: 1600 - Lv5: 1920 - Lv6: 2100 - Lv7: 1560 - Lv8: 2880 - Lv9: 3200 - Lv10: 3520 - } - AfterCastActDelay: { - Lv1: 1000 - Lv2: 1200 - Lv3: 1400 - Lv4: 1600 - Lv5: 1800 - Lv6: 2000 - Lv7: 2200 - Lv8: 2400 - Lv9: 2600 - Lv10: 2800 + Lv1: 500 + Lv2: 800 + Lv3: 1_100 + Lv4: 1_400 + Lv5: 1_700 + Lv6: 2_000 + Lv7: 2_300 + Lv8: 2_600 + Lv9: 2_900 + Lv10: 3_200 } + AfterCastActDelay: 1400 FixedCastTime: { - Lv1: 160 - Lv2: 240 - Lv3: 320 - Lv4: 400 - Lv5: 480 - Lv6: 700 - Lv7: 640 - Lv8: 720 - Lv9: 800 - Lv10: 880 + Lv1: 300 + Lv2: 400 + Lv3: 500 + Lv4: 600 + Lv5: 700 + Lv6: 800 + Lv7: 900 + Lv8: 1_000 + Lv9: 1_100 + Lv10: 1_200 } Requirements: { SPCost: { From 2f7436695fd167e055e00fdb238913b2c861f775 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 25 Jun 2023 22:32:42 -0300 Subject: [PATCH 06/14] Rebalance of MG_THUNDERSTORM (Thunder Storm) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed casting time changed. - Old: (Skill Level × 0.8) x 0.2 seconds. - New: 1.5 seconds at all skill levels. Variable casting time changed. - Old: (Skill Level × 0.8) x 0.8 seconds. - New: 2.5 + (Skill Level × 0.2) seconds Values based in iRO Wiki From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 567accbe7f5..f355c825ee6 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -1172,16 +1172,16 @@ skill_db: ( } InterruptCast: true CastTime: { - Lv1: 640 - Lv2: 1280 - Lv3: 1920 - Lv4: 2560 - Lv5: 3200 - Lv6: 3840 - Lv7: 4480 - Lv8: 5120 - Lv9: 5760 - Lv10: 6400 + Lv1: 2_700 + Lv2: 2_900 + Lv3: 3_100 + Lv4: 3_300 + Lv5: 3_500 + Lv6: 3_700 + Lv7: 3_900 + Lv8: 4_100 + Lv9: 4_300 + Lv10: 4_500 } AfterCastActDelay: { Lv1: 2000 @@ -1196,18 +1196,7 @@ skill_db: ( Lv10: 2000 } SkillData1: 500 - FixedCastTime: { - Lv1: 160 - Lv2: 320 - Lv3: 480 - Lv4: 640 - Lv5: 800 - Lv6: 960 - Lv7: 1120 - Lv8: 1280 - Lv9: 1440 - Lv10: 1600 - } + FixedCastTime: 1_500 Requirements: { SPCost: { Lv1: 29 From 67f2716a84279f0964f0552eb56f756613c99fe8 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 25 Jun 2023 22:36:22 -0300 Subject: [PATCH 07/14] Rebalance of MG_FIREBALL (Fire Ball) Fixed casting time changed. - Old: 0.3 seconds at skill level 1-5, 0.2 seconds at skill level 6-10. - New: 0.2 seconds at all skill levels. Variable casting time changed. - Old: 1.2 seconds at skill level 1-5, 0.8 seconds at skill level 6-10. - New: 0.8 seconds at all skill levels. Global delay of skills changed. - Old: 1.5 seconds at skill level 1-5, 1.0 seconds at skill level 6-10. - New: 0.7 seconds at all skill levels. From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 39 +++------------------------------------ 1 file changed, 3 insertions(+), 36 deletions(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index f355c825ee6..89e54521d46 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -892,42 +892,9 @@ skill_db: ( } SplashRange: 2 InterruptCast: true - CastTime: { - Lv1: 1280 - Lv2: 1280 - Lv3: 1280 - Lv4: 1280 - Lv5: 1280 - Lv6: 800 - Lv7: 800 - Lv8: 800 - Lv9: 800 - Lv10: 800 - } - AfterCastActDelay: { - Lv1: 1500 - Lv2: 1500 - Lv3: 1500 - Lv4: 1500 - Lv5: 1500 - Lv6: 1000 - Lv7: 1000 - Lv8: 1000 - Lv9: 1000 - Lv10: 1000 - } - FixedCastTime: { - Lv1: 320 - Lv2: 320 - Lv3: 320 - Lv4: 320 - Lv5: 320 - Lv6: 200 - Lv7: 200 - Lv8: 200 - Lv9: 200 - Lv10: 200 - } + CastTime: 800 + AfterCastActDelay: 700 + FixedCastTime: 200 Requirements: { SPCost: 25 } From e08c3240bcafc95f1a213518539fc00038907e08 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 25 Jun 2023 22:38:04 -0300 Subject: [PATCH 08/14] Rebalance of MG_SOULSTRIKE (Soul Strike) Global delay of skills changed. - Old: 1.2 - 2.7 seconds at skill level 1-10. - New: 1.4 seconds at all skill levels. From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 89e54521d46..810a14a733f 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -681,18 +681,7 @@ skill_db: ( } InterruptCast: true CastTime: 400 - AfterCastActDelay: { - Lv1: 1200 - Lv2: 1200 - Lv3: 1600 - Lv4: 1600 - Lv5: 2000 - Lv6: 2000 - Lv7: 2400 - Lv8: 2400 - Lv9: 2800 - Lv10: 2500 - } + AfterCastActDelay: 1_400 FixedCastTime: 100 Requirements: { SPCost: { From c55f6a99808f08326f619406ba57cd52ae2fcf92 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 25 Jun 2023 22:39:40 -0300 Subject: [PATCH 09/14] Rebalance of MG_FROSTDIVER (Frost Diver) Global delay of skill changed: 1.5s -> 0.5s From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 810a14a733f..b0940d8f1bf 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -788,7 +788,7 @@ skill_db: ( Element: "Ele_Water" InterruptCast: true CastTime: 640 - AfterCastActDelay: 1500 + AfterCastActDelay: 500 SkillData2: { Lv1: 3000 Lv2: 6000 From 655006c6e01d954933621694e524e65280ae1faf Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sat, 1 Jul 2023 12:54:23 -0300 Subject: [PATCH 10/14] move bonus calculation of AB_CLEMENTIA and AB_CANTO calculating it outside sc_start and passing as level prevents any possible calculation over the original level, which is needed for blessing (given by AB_CLEMENTIA). Moving the calculation to sc_start logic both centralizes the bonus calculation in a single place and also allows us to calculate other values based in the expected level --- src/map/skill.c | 13 +++++++------ src/map/status.c | 21 +++++++++++++++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index 40a92929571..8df203feb12 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -10070,12 +10070,13 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * case AB_CANTO: { int level = 0; - if( sd ) - level = skill_id == AB_CLEMENTIA ? pc->checkskill(sd,AL_BLESSING) : pc->checkskill(sd,AL_INCAGI); - if( sd == NULL || sd->status.party_id == 0 || flag&1 ) - clif->skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, level + (sd ? (sd->status.job_level / 10) : 0), skill->get_time(skill_id, skill_lv), skill_id)); - else if( sd ) { - if( !level ) + if (sd != NULL) + level = skill_id == AB_CLEMENTIA ? pc->checkskill(sd, AL_BLESSING) : pc->checkskill(sd, AL_INCAGI); + + if (sd == NULL || sd->status.party_id == 0 || flag & 1) { + clif->skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, level, skill->get_time(skill_id, skill_lv), skill_id)); + } else if (sd != NULL) { + if (level == 0) clif->skill_fail(sd, skill_id, USESKILL_FAIL, 0, 0); else party->foreachsamemap(skill->area_sub, sd, skill->get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill->castend_nodamage_id); diff --git a/src/map/status.c b/src/map/status.c index fbb790fa511..bf7a7df46fa 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -7521,9 +7521,17 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl // Fall through to SC_INC_AGI FALLTHROUGH case SC_DEC_AGI: + val2 = 2 + val1; //Agi change + break; case SC_INC_AGI: + { + struct map_session_data *srcsd = BL_CAST(BL_PC, src); + if (skill_id == AB_CANTO && srcsd != NULL) + val1 += srcsd->status.job_level / 10; + val2 = 2 + val1; //Agi change break; + } case SC_ENDURE: val2 = 7; // Hit-count [Celest] if( !(flag&SCFLAG_NOAVOID) && (bl->type&(BL_PC|BL_MER)) && !map_flag_gvg(bl->m) && !map->list[bl->m].flag.battleground && !val4 ) { @@ -8161,11 +8169,20 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl val4 = INVALID_TIMER; //Kaahi Timer. break; case SC_BLESSING: + { + int bonus = 0; + struct map_session_data *srcsd = BL_CAST(BL_PC, src); + if (skill_id == AB_CLEMENTIA && srcsd != NULL) + bonus += srcsd->status.job_level / 10; + if ((!undead_flag && st->race!=RC_DEMON) || bl->type == BL_PC) - val2 = val1; + val2 = val1 + bonus; // STR, DEX, INT increase else - val2 = 0; //0 -> Half stat. + val2 = 0; //0 means that STR, DEX and INT should be halved + + val1 += bonus; // Officially, val1 is incremented (for us, this doesn't make a difference) break; + } case SC_TRICKDEAD: if (vd) vd->dead_sit = 1; total_tick = INFINITE_DURATION; From 2115de23a0540f9c62bda89580f49517e7f396bb Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sat, 1 Jul 2023 14:28:41 -0300 Subject: [PATCH 11/14] Rebalance of AL_BLESSING (Blessing) - Also increases HIT +2 per skill level - Clementia also gives additional HIT +1 for each 10 job levels From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/sc_config.conf | 1 + src/map/status.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/db/re/sc_config.conf b/db/re/sc_config.conf index 2043e6f5135..956edf1fee1 100644 --- a/db/re/sc_config.conf +++ b/db/re/sc_config.conf @@ -215,6 +215,7 @@ SC_BLESSING: { Str: true Int: true Dex: true + Hit: true } Icon: "SI_BLESSING" Skill: "AL_BLESSING" diff --git a/src/map/status.c b/src/map/status.c index bf7a7df46fa..52eb6153fe5 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -4740,6 +4740,10 @@ static int status_calc_hit(struct block_list *bl, struct status_change *sc, int hit -= sc->data[SC_HEAT_BARREL]->val4; if (sc->data[SC_SOULFALCON] != NULL) hit += sc->data[SC_SOULFALCON]->val3; +#ifdef RENEWAL + if (sc->data[SC_BLESSING] != NULL) + hit += sc->data[SC_BLESSING]->val3; +#endif return cap_value(hit, battle_config.hit_min, battle_config.hit_max); } @@ -8175,10 +8179,14 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl if (skill_id == AB_CLEMENTIA && srcsd != NULL) bonus += srcsd->status.job_level / 10; - if ((!undead_flag && st->race!=RC_DEMON) || bl->type == BL_PC) + if ((!undead_flag && st->race != RC_DEMON) || bl->type == BL_PC) { val2 = val1 + bonus; // STR, DEX, INT increase - else +#ifdef RENEWAL + val3 = val1 * 2 + bonus; // HIT increase +#endif + } else { val2 = 0; //0 means that STR, DEX and INT should be halved + } val1 += bonus; // Officially, val1 is incremented (for us, this doesn't make a difference) break; From 4518ae7f0b66d986dc6225952b19af5c52c9a046 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sat, 15 Aug 2020 23:10:37 -0300 Subject: [PATCH 12/14] Rebalance of AL_INCAGI (Increase Agility) - Also increases ASPD +1% per skill level - Canto Candidus also gives additional ASPD +1% for each 10 job levels From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/sc_config.conf | 1 + src/map/status.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/db/re/sc_config.conf b/db/re/sc_config.conf index 956edf1fee1..f8828a96cc2 100644 --- a/db/re/sc_config.conf +++ b/db/re/sc_config.conf @@ -229,6 +229,7 @@ SC_INC_AGI: { CalcFlags: { Agi: true Speed: true + Aspd: true } Icon: "SI_INC_AGI" Skill: "AL_INCAGI" diff --git a/src/map/status.c b/src/map/status.c index 52eb6153fe5..f65b5ed70ad 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -5487,6 +5487,10 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s bonus += sc->data[SC_STEAMPACK]->val2; if (sc->data[SC_SKF_ASPD] != NULL) bonus += sc->data[SC_SKF_ASPD]->val1; +#ifdef RENEWAL + if (sc->data[SC_INC_AGI] != NULL) + bonus += sc->data[SC_INC_AGI]->val1; // + SkillLevel% +#endif } return (bonus + pots); From 10aca69c2452c4caca77c53b607e569549adfb86 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 2 Jul 2023 15:37:49 -0300 Subject: [PATCH 13/14] Rebalance of AL_ANGELUS (Angelus) - Now increases +50 MaxHP per SkillLevel - The increased HP also gets healed - 30s cooldown added From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/sc_config.conf | 1 + db/re/skill_db.conf | 1 + src/map/skill.c | 19 +++++++++++++++++-- src/map/status.c | 9 ++++++++- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/db/re/sc_config.conf b/db/re/sc_config.conf index f8828a96cc2..1efbeb8e023 100644 --- a/db/re/sc_config.conf +++ b/db/re/sc_config.conf @@ -199,6 +199,7 @@ SC_ANGELUS: { NoMagicBlocked: true } CalcFlags: { + Maxhp: true Def2: true } Icon: "SI_ANGELUS" diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index b0940d8f1bf..ed565741ea3 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -1557,6 +1557,7 @@ skill_db: ( InterruptCast: true CastTime: 350 AfterCastActDelay: 3500 + CoolDown: 30_000 SkillData1: { Lv1: 30000 Lv2: 60000 diff --git a/src/map/skill.c b/src/map/skill.c index 8df203feb12..a6102d2a7ad 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -7897,8 +7897,23 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * case WM_FRIGG_SONG: if (sd == NULL || sd->status.party_id == 0 || (flag & 1) != 0) { // Aegis: special handling, even though they aren't of magic skilltype. - if (status->isimmune(bl) == 0 || src == bl || (skill_id != AL_ANGELUS && skill_id != PR_MAGNIFICAT && skill_id != PR_GLORIA)) - clif->skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, skill_lv, skill->get_time(skill_id, skill_lv), skill_id)); + if (status->isimmune(bl) == 0 || src == bl || (skill_id != AL_ANGELUS && skill_id != PR_MAGNIFICAT && skill_id != PR_GLORIA)) { + int sc_result = sc_start(src, bl, type, 100, skill_lv, skill->get_time(skill_id, skill_lv), skill_id); + clif->skill_nodamage(bl, bl, skill_id, skill_lv, sc_result); + +#ifdef RENEWAL + if (skill_id == AL_ANGELUS && sc_result == 1) { + struct status_change *sc = status->get_sc(bl); + + // Angelus should only heal when the SC is actually set in the player (starts now or was reapplied). + // Angelus may "succeed" (sc_result = 1) and not start the SC when you have the effect of a greater level. + // When this happen, we should not heal. + // Comparing val1 to skill_lv will ensure us that it has succeeded and uses the current skill_lv + if (sc->data[SC_ANGELUS] != NULL && sc->data[SC_ANGELUS]->val1 == skill_lv) + status->heal(bl, sc->data[SC_ANGELUS]->val3, 0, STATUS_HEAL_DEFAULT); + } +#endif + } } else if (sd != NULL) { party->foreachsamemap(skill->area_sub, sd, skill->get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill->castend_nodamage_id); } diff --git a/src/map/status.c b/src/map/status.c index f65b5ed70ad..b23d001510e 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -5766,6 +5766,10 @@ static unsigned int status_calc_maxhp(struct block_list *bl, struct status_chang maxhp -= maxhp * sc->data[SC_GM_BATTLE2]->val1 / 100; if (sc->data[SC_LUNARSTANCE] != NULL) maxhp += maxhp * sc->data[SC_LUNARSTANCE]->val2 / 100; +#ifdef RENEWAL + if (sc->data[SC_ANGELUS] != NULL) + maxhp += sc->data[SC_ANGELUS]->val3; +#endif return (unsigned int)cap_value(maxhp, 1, UINT_MAX); } @@ -8238,7 +8242,10 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl sc_start(src, bl, SC_ENDURE, 100, 1, total_tick, skill_id); // Endure effect break; case SC_ANGELUS: - val2 = 5*val1; //def increase + val2 = 5 * val1; // def increase +#ifdef RENEWAL + val3 = 50 * val1; // MaxHP increase +#endif break; case SC_IMPOSITIO: val2 = 5*val1; //watk increase From 8f0fb3286f29ffd896bd60c5492d1c41e51c0cb3 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 2 Jul 2023 15:45:18 -0300 Subject: [PATCH 14/14] Rebalance of AL_HOLYLIGHT (Holy Light) - Fixed casting time changed: 0.4s -> 0.2s - Variable casting time changed: 1.6s -> 0.8s From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index ed565741ea3..2ad1724eeb1 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -5595,8 +5595,8 @@ skill_db: ( AttackType: "Magic" Element: "Ele_Holy" InterruptCast: true - CastTime: 1600 - FixedCastTime: 400 + CastTime: 800 + FixedCastTime: 200 Requirements: { SPCost: 15 }