Page 1 of 1

Dual Wield / Left Axe

PostPosted: Sat Jun 11, 2011 5:24 am
by Shiraja
Hi again,

Since I felt like doing some more tests I thought i could have a look at Dual Wield / Left Axe mechanics. Now this is pretty hard to test since I have absolutely no idea what formulas you use to calculate the damage of these skills. Nevertheless, i found something interesting.


Starting position

Left Axe works in the way that the offhand swings all the time but both mainhand and offhand do reduced dmg. This penalty decreases the higher the Left Axe Skill. An estimation on how it works on liveservers is: (Actually, they changed the formula on liveservers but i think the old one still applies on dolservers)

damage multiplier = 62.5% + 0.33%*spec

I assume you use a similar formula.

In contrast, Dual Wield does always 100% dmg mainhand and offhand but the offhand swings only every other hit. On D2 each class can dual wield.


Problem

When I tried dual wielding on my reaver I noticed that my Mainhanddmg drops significantly even though I made sure none of the dmg stats changed.I told Tola about it and he encouraged me to do some testing:

I made sure I used weapons of the same speed (4.0) in Main as well as in Offhand to eliminate different attackspeeds when offhand swings occur.


Results

Target: yellow con mobs in NM, +11 skills

Constrictor with flex Mainhand, no offhand: 744 dmg
Constrictor with Flex Mainhand, Sword Offhand: 491 Mainhand (~66%dmg), offhand did not swing 100% of the time.

Using the formula above:

62.5% + 0.33% * 12 = 66.46%


Target: yellow con mobs in NM, +11 skills, + 13 Dual Wielding Skills

Constrictor with flex Mainhand, no offhand: 744 dmg
Constrictor with Flex Mainhand, Sword Offhand: 526 Mainhand (~70.6%dmg), offhand did not swing 100% of the time.

Using the formula above:

62.5% + 0.33% * 25 = 70.75%


Obviously, Left Axe mechanics are applied even though Offhand does not always swing. Basically, we get both disadvantages and would have to increase both Dual Wield and Left Axe to decrease both penalties.


Possible origin of the error

I've no idea how you coded everything I just write down what I think could be the problem:

1. Since all classes seem to have 1 in each skill there could be a conflict between Dual Wield/Celtic Dual and Left Axe.

2. The change that Sword = Blade = Slash could have messed up the identification whether the Offhand is a Left Axe or a Slash weapon


Solution?

I think this definitely deserves a fix especially if it affects regular Dual Wield Classes as well. Especially Mercs and BMs are hit pretty hard because they can't increase their LA Spec above 1+52 which cripples their dmg. Unfortunately, i dont have a high enough Merc/Blademaster to run some tests but that souldn't be a problem for you I guess.

I could imagine that either disabling Left Axe or Dual Wield and Celtic Dual as an offskill could solve the problem.

Greets,
Shiraja

Re: Dual Wield / Left Axe

PostPosted: Sat Jun 11, 2011 10:08 am
by Graveen
Hi Shiraja,

Thank you for your feedback.

For theses kinds of tests i suggest a spreadsheet and its Eureqa-ification ( http://creativemachines.cornell.edu/eureqa )

Re: Dual Wield / Left Axe

PostPosted: Sat Jun 11, 2011 11:28 am
by Tolakram
I wonder if the code applies left axe forumlas if dual wield is not a native skill. I'll look.

Re: Dual Wield / Left Axe

PostPosted: Sat Jun 11, 2011 12:34 pm
by Tolakram
Messy stuff

GamePlayer: (this is also where H2H multi hits are supposed to work)
Code: Select all
public override int CalculateLeftHandSwingCount()
{
if (CanUseLefthandedWeapon == false)
return 0;

if (GetBaseSpecLevel(Specs.Left_Axe) > 0)
return 1; // always use left axe

// DW/FW chance
int specLevel = Math.Max(GetModifiedSpecLevel(Specs.Celtic_Dual), GetModifiedSpecLevel(Specs.Dual_Wield));
if (specLevel > 0 || GetBaseSpecLevel(Specs.Fist_Wraps) > 0)
{
return Util.Chance(25 + (specLevel - 1) * 68 / 100) ? 1 : 0;
}

// HtH chance
specLevel = GetModifiedSpecLevel(Specs.HandToHand);
InventoryItem attackWeapon = AttackWeapon;
InventoryItem leftWeapon = (Inventory == null) ? null : Inventory.GetItem(eInventorySlot.LeftHandWeapon);
if (specLevel > 0 && ActiveWeaponSlot == eActiveWeaponSlot.Standard
&& attackWeapon != null && attackWeapon.Object_Type == (int)eObjectType.HandToHand &&
leftWeapon != null && leftWeapon.Object_Type == (int)eObjectType.HandToHand)
{
specLevel--;
int randomChance = Util.Random(99);
int hitChance = specLevel >> 1;
if (randomChance < hitChance)
return 1; // 1 hit = spec/2

hitChance += specLevel >> 2;
if (randomChance < hitChance)
return 2; // 2 hits = spec/4

hitChance += specLevel >> 4;
if (randomChance < hitChance)
return 3; // 3 hits = spec/16

return 0;
}

return 0;
}
I don't think GetBaseSpeclevel(leftAxe) is true for everyone but I'll check.

DOH
Code: Select all
// calculate LA damage reduction
if (owner is GamePlayer)
{
if (owner.CanUseLefthandedWeapon && leftWeapon != null && leftWeapon.Object_Type != (int)eObjectType.Shield
&& attackWeapon != null && (attackWeapon.Item_Type == Slot.RIGHTHAND || attackWeapon.Item_Type == Slot.LEFTHAND))
{
leftHandSwingCount = owner.CalculateLeftHandSwingCount();

int LASpec = ((GamePlayer)owner).GetModifiedSpecLevel(Specs.Left_Axe);
if (LASpec > 0)
effectiveness *= 0.625 + 0.0034 * LASpec;
}
}
GetModifiedSpeclevel will return >1 for any player with a bonus, so this is not good.

Re: Dual Wield / Left Axe

PostPosted: Fri Jul 08, 2011 3:25 am
by demonic4life
This could be the reason why My Merc does so crappy damage even with 70+ Dual Wield?