These are formulas we have wrong, I just wanted to post them some where until I can get them implemented (which requires some other info I need to gather)
Generic formula:
Code:
int base = GetSkillBaseDamage(skill);
int skill_level = GetSkill(skill);
if (skill_level >= 25)
base++;
if (skill_level >= 75)
base++;
if (skill_level >= 125)
base++;
if (skill_level >= 175)
base++;
return base;
This is the generic formula, at one time it was used for all special attacks but frenzy and backstab with bash having an extra bonus. GetSkillBaseDamage returns the innate base damage of the skill:
kick = 3
dragon punch/tail rake = 12
eagle strike = 7
round kick = 5
tiger claw = 4
flying kick = 25
bash = 2
Flying Kick when it used this generic formula had a min damage cap of level * 4 / 5 (or level * 8 / 10 as our code currently does :P) at 51+, unsure about other skills
Bash AC bonus: (this isn't classic, unsure when added, there for at least pop+, best guess either sometime during pop or luclin, not velious though)
Code:
if (HasShield) {
int ac = GetShieldAC();
base += GetLevel() / 5 + 2; // base from the generic one above
if (base > ac)
base = ac;
return base;
}
Revamped bash:
Code:
Item *item = nullptr;
if (HasPrimary() && PrimaryIs2hWeapon())
item = GetItemInPrimary();
else if (HasItemInSecondary() && ItemInSecondaryIsShield())
item = GetItemInSecondary();
if (item) {
int skill = GetSkill(SkillBash);
float skill_bonus = skill * 0.1; // skill / 10.0
double acbonus = item->AC * 0.039999999; // ac / 25.0
if (acbouns > skill_bonus)
acbonus = skill_bonus
return acbonus + skill_bonus;
}
return 0;
Revamped kick:
Code:
float skill_bonus = GetSkill(SkillKick) * 0.1; // skill / 10.0
double acbonus = 0.0;
if (HasItemInFeet()) {
acbonus = GetItemInFeet()->AC * 0.039999999; // ac / 25.0
if (acbonus > skill_bonus)
acbonus = skill_bonus;
return acbonus + skill_bonus;
Frenzy:
Code:
int base = 10;
if (HasPrimary()) {
int level = GetLevel();
if (level > 15)
base += level - 15;
if (base > 23)
base = 23;
if (level > 50)
base += 2;
if (level > 54)
base++;
if (level > 59)
base++;
}
return base;
It does appear that holding anything in primary should cause it to scale damage more. Frenzy also has a min damage cap equal to level * 4 / 5 at 51+
Revamp Flying Kick:
Code:
float skill_bonus = GetSkill(SkillFlyingKick) * 0.11111111; // skill / 9.0
double acbonus = 0.0;
Item *item = GetItemInFeet();
if (item)
acbonus = item->GetAC() * 0.039999999; // AC / 25.0
if (acbonus > skill_bonus)
acbonus = skill_bonus;
return acbonus + skill_bonus;
That's what the client appears to do, should be the same as skill / 9 + boot ac / 25
Unsure if there is a still min damage with this formula, I thought there was, but a naked parse confused me so I need to investigate still
Backstab:
Code:
Item *item = GetItemInPrimary();
int base = 0;
if (item && IsClient() || IsNPC()) {
base = item->GetBackstabDamage();
if (item->HasElementalDamage()) {
if (target && !target->ResistElementalWeaponDamage(item))
base += item->ElementalDamage;
}
if (item->BaneDamage() && target->CheckBaneDamage(item))
base += item->BaneDamage;
// There is also some kind of default to 3 in here ...
}
base = (GetSkill(SkillBackstab) * 0.02 + 2.0) * base;
return base;
That's it for now :P