Skip to content

Commit

Permalink
Official Enchant Blade damage (fixes #975)
Browse files Browse the repository at this point in the history
- Implemented the fully official damage calculation for this skill, it's now 100% accurate
** Partially reverted c3f4618
** The damage bonus is: [((SkillLv x 20) + 100) x srcBaseLevel / 150] + srcINT + srcMATK - tarMDEF - tarMDEF2
** The damage bonus from base level and INT is calculated when the status change starts
** The damage bonus from MATK and the reduction from MDEF/MDEF2 is calculated per hit
  • Loading branch information
Playtester committed May 26, 2016
1 parent f91bf02 commit 1640b40
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 17 deletions.
30 changes: 14 additions & 16 deletions src/map/battle.c
Expand Up @@ -4445,22 +4445,6 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
#endif
}
}
if (!skill_id) {
if (sc->data[SC_ENCHANTBLADE]) {
//[((Skill Lv x 20) + 100) x (casterBaseLevel / 150)] + casterInt
int64 enchant_dmg = (sc->data[SC_ENCHANTBLADE]->val1 * 20 + 100) * status_get_lv(src) / 150 + status_get_int(src);

enchant_dmg = enchant_dmg - (tstatus->mdef + tstatus->mdef2);
if (sstatus->matk_max > sstatus->matk_min)
enchant_dmg = enchant_dmg + sstatus->matk_min + rnd()%(sstatus->matk_max - sstatus->matk_min);
else
enchant_dmg = enchant_dmg + sstatus->matk_min;
if (enchant_dmg > 0) {
ATK_ADD(wd.damage, wd.damage2, enchant_dmg);
RE_ALLATK_ADD(wd, enchant_dmg);
}
}
}
if (sc->data[SC_GLOOMYDAY_SK] && (inf3&INF3_SC_GLOOMYDAY_SK)) {
ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_GLOOMYDAY_SK]->val2);
RE_ALLATK_ADDRATE(wd, sc->data[SC_GLOOMYDAY_SK]->val2);
Expand Down Expand Up @@ -5023,6 +5007,20 @@ struct Damage battle_calc_weapon_final_atk_modifiers(struct Damage wd, struct bl
hp = 2*hp/100; //2% hp loss per hit
status_zap(src, hp, 0);
}
// Only affecting non-skills
if (!skill_id) {
if (sc->data[SC_ENCHANTBLADE]) {
//[((Skill Lv x 20) + 100) x (casterBaseLevel / 150)] + casterInt + MATK - MDEF - MDEF2
int64 enchant_dmg = sc->data[SC_ENCHANTBLADE]->val2;
if (sstatus->matk_max > sstatus->matk_min)
enchant_dmg = enchant_dmg + sstatus->matk_min + rnd() % (sstatus->matk_max - sstatus->matk_min);
else
enchant_dmg = enchant_dmg + sstatus->matk_min;
enchant_dmg = enchant_dmg - (tstatus->mdef + tstatus->mdef2);
if (enchant_dmg > 0)
ATK_ADD(wd.damage, wd.damage2, enchant_dmg);
}
}
status_change_end(src,SC_CAMOUFLAGE, INVALID_TIMER);
}
switch (skill_id) {
Expand Down
2 changes: 1 addition & 1 deletion src/map/skill.c
Expand Up @@ -8801,7 +8801,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
break;
case RK_ENCHANTBLADE:
clif_skill_nodamage(src,bl,skill_id,skill_lv,
sc_start2(src,bl,type,100,skill_lv,(100+20*skill_lv)*(status_get_lv(src)/150)+sstatus->int_,skill_get_time(skill_id,skill_lv)));
sc_start2(src,bl,type,100,skill_lv,((100+20*skill_lv)*status_get_lv(src))/150+sstatus->int_,skill_get_time(skill_id,skill_lv)));
break;
case RK_DRAGONHOWLING:
if( flag&1)
Expand Down

0 comments on commit 1640b40

Please sign in to comment.