Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Development

Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum)

Reply
 
Thread Tools Display Modes
  #1  
Old 01-04-2016, 04:14 PM
demonstar55
Demi-God
 
Join Date: Apr 2008
Location: MA
Posts: 1,164
Default Special Attack Forumals

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

Last edited by demonstar55; 02-04-2016 at 06:26 PM..
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 01:27 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3