|
@@ -737,7 +737,36 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
|
|
// Affected by attacker ATK bonuses
|
|
|
if( sd && !nk[NK_IGNOREATKCARD] ) {
|
|
|
int32 race2_val = 0;
|
|
|
+#ifdef RENEWAL
|
|
|
+
|
|
|
+// Simplified formula to round down the damage
|
|
|
+#define APPLY_CARDFIX_RE(damage, fix) { (damage) = (damage) - (int64)(((damage) * (100 - max(0, 100+(fix)))) / 100); }
|
|
|
+ // On (at least) BF_MAGIC, damages are calculated consecutively and rounded down in the following order to match official damage :
|
|
|
+ // size, race2, ele, atk_ele, race, class
|
|
|
+ APPLY_CARDFIX_RE( damage, sd->indexed_bonus.magic_addsize[tstatus->size] + sd->indexed_bonus.magic_addsize[SZ_ALL] );
|
|
|
|
|
|
+ // race2 is the same as the bonus per class ID
|
|
|
+ for (const auto &raceit : t_race2)
|
|
|
+ race2_val += sd->indexed_bonus.magic_addrace2[raceit];
|
|
|
+ for (const auto &it : sd->add_mdmg) {
|
|
|
+ if (it.id == t_class) {
|
|
|
+ race2_val += it.val;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ APPLY_CARDFIX_RE( damage, race2_val );
|
|
|
+
|
|
|
+ if( !nk[NK_IGNOREELEMENT] ) { // Affected by Element modifier bonuses
|
|
|
+ APPLY_CARDFIX_RE( damage, sd->indexed_bonus.magic_addele[tstatus->def_ele] + sd->indexed_bonus.magic_addele[ELE_ALL] +
|
|
|
+ sd->indexed_bonus.magic_addele_script[tstatus->def_ele] + sd->indexed_bonus.magic_addele_script[ELE_ALL] );
|
|
|
+ APPLY_CARDFIX_RE( damage, sd->indexed_bonus.magic_atk_ele[rh_ele] + sd->indexed_bonus.magic_atk_ele[ELE_ALL] );
|
|
|
+ }
|
|
|
+ APPLY_CARDFIX_RE( damage, sd->indexed_bonus.magic_addrace[tstatus->race] + sd->indexed_bonus.magic_addrace[RC_ALL] );
|
|
|
+ APPLY_CARDFIX_RE( damage, sd->indexed_bonus.magic_addclass[tstatus->class_] + sd->indexed_bonus.magic_addclass[CLASS_ALL] );
|
|
|
+#undef APPLY_CARDFIX_RE
|
|
|
+
|
|
|
+// Pre-renewal / old renewal behaviour
|
|
|
+#else
|
|
|
for (const auto &raceit : t_race2)
|
|
|
race2_val += sd->indexed_bonus.magic_addrace2[raceit];
|
|
|
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addrace[tstatus->race] + sd->indexed_bonus.magic_addrace[RC_ALL] + race2_val) / 100;
|
|
@@ -755,6 +784,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
|
|
}
|
|
|
}
|
|
|
APPLY_CARDFIX(damage, cardfix);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
// Affected by target DEF bonuses
|