PDA

View Full Version : Rogue Max Backstab Damage Rule


Zeice
07-08-2009, 02:57 PM
Well I was thinking since there are now rules for the monk damage attacks and archery, there should be one for rogue's backstab damage. Granted I don't know what KLS has left to do to the formulas for backstab damage, but for custom server purposes this should be a temporary solution. Now I've just been delving into the code for the first time, so this is only my second attempt at something like this. I was comparing all the rule additions for monk/archery so I think I've figured this out. My only thing is I don't know if it would be better to use RuleR or RuleI...but I'll give both examples below and maybe someone can give me some better insight.

Another thing to note is this is just for max backstab damage above level 25. I would think min backstab damage is relatively fine, and damage below level 25 should be a moot point.

First RuleI:


ruletypes.h
----------------

ADD
RULE_INT ( Combat, MaxBackstabBonus, 10) //% Modifier

AFTER
RULE_INT ( Combat, RoundKickBonus, 10) //% Modifier that this skill gets to str and skill bonuses



special_attacks.cpp
--------------------------

REPLACE
max_hit = (((2*primaryweapondamage) * GetDamageTable(BACKSTAB) / 100) * 10 * GetSkill(BACKSTAB) / 355) + ((level-25)/3) + 1;

WITH
max_hit = (((2*primaryweapondamage) * GetDamageTable(BACKSTAB) / 100) * RuleI(Combat, MaxBackstabBonus) * GetSkill(BACKSTAB) / 355) + ((level-25)/3) + 1;



Or using RuleR:


ruletypes.h
----------------

ADD
RULE_REAL ( Combat, MaxBackstabBonus, 1) // % Modifier to Max Backstab Damage (.5 = 50% base damage, 1 = 100%, 2 = 200%)

AFTER
RULE_INT ( Combat, RoundKickBonus, 10) //% Modifier that this skill gets to str and skill bonuses




special_attacks.cpp
--------------------------

REPLACE
max_hit = (((2*primaryweapondamage) * GetDamageTable(BACKSTAB) / 100) * 10 * GetSkill(BACKSTAB) / 355) + ((level-25)/3) + 1;

WITH
max_hit = ((RuleR(Combat, MaxBackstabBonus)*(2*primaryweapondamage) * GetDamageTable(BACKSTAB) / 100) * 10 * GetSkill(BACKSTAB) / 355) + ((level-25)/3) + 1;



Like I said I'm not sure which route would be the best way to go or if I even did it right, any help would be appreciated. =)

ChaosSlayerZ
07-08-2009, 04:08 PM
KLS prabobly didn't see a need for BS rule cause BS has recently was changed to be based of new weapon property field called backstab_damage, which now used as base for BS sintead of normal weapon dmg (I am not however sure if this works for T. or just for SoF?)

This is a guess however =)

Nothing against the rule thought =)

Zeice
07-08-2009, 04:12 PM
Yeah, I don't believe that field is being used just yet. It shows on items, but I don't think it's being used in the formula. Like I said this is just a temporary thing if people wanted to use it. /shrug

ChaosSlayerZ
07-08-2009, 04:57 PM
well as of 6/15 changelog it says:

Recommended SQL: (This is recommended for databases that don't stay current with PEQ or are custom)
UPDATE items SET backstabdmg = damage WHERE backstabdmg = 0 AND itemtype = 2;


I guess it means that weapon no longer use normal DMG for BS base- though best way to test this is to take a weapon with high normal dmg, 1 bs dmg and see how mcuh it stabs for with the latest build

Zeice
07-08-2009, 05:05 PM
Quotes from Trevius:

I am sure those will be added in eventually. But, adding in Heroic stats is my first priority. Once I know how to add one, the others should be cake. For spelldmg and healamt, each of those would have to be coded in separate places, so it would be different than coding in Heroic stuff, which is why I am not doing them all at the same time. After Heroic stats, I will probably try to see about doing backstabdmg next, because that is a pretty cool stat IMO, considering I played a rogue on live for years. I like the idea of being able to have hard hitting weapons that devs don't have to nerf down just because they don't want insane backstabs from Rogues. I looked through the PEQ items table and it looks like many/most of the piercers already have the backstabdmg setting set. I will still put up a simple MySQL query when I add it for databases that can't update to PEQ so Backstab will still work perfect for them. Basically, I think this would work well:

Well, I wasn't able to get to actually having the server make use of any of the new stats tonight, but I was able to get them all working to show up on items in game when using SoF.

I still plan to start the server side calculations by adding in Heroic stats first, but I am still not sure what exactly needs to be done to do it. From testing, I did verify that not only do Heroic stats increase the cap by the value set, but they also add that many of that particular stat for the value set. So, if you are capped at 300 STR and your items actually total 300 STR, and then you get an item that has 10 Heroic STR on it, you will then have 310 STR showing.

I will mess with it more tomorrow night and see if I can figure out how to handle the code for that stuff.

I also added in the field for normal (non-heroic) SV Corruption, since it wasn't coded yet. The Corruption and stuff will be the hardest stuff to add since it isn't anywhere in the source yet. At least the other stats are already everywhere they need to be and to code in Heroic stats should just mean making it add the extra values and increase the caps.

Fields are just for looks atm. They don't do anything, yet.

ChaosSlayerZ
07-08-2009, 05:12 PM
roger that

trevius
07-08-2009, 05:18 PM
Yeah, the new backstabdmg field in the items table will work for all clients once it is added to actually be factored into the source code. I don't see much of a reason for a rule for this since the new field should make it easy enough to fully customize all bs damage for all items, or even just for specific weapons as needed. If no one else gets the new stats added soon, hopefully I will be able to get to them sometime soon. I tried looking into getting them added already, but there are a few things I wasn't understanding. Usually a second look after taking a break from it will help me to understand it better. If anyone has coding suggestions to implement the new stats, I am all ears.

The rule isn't a bad temporary option if servers wanted to add it to thier source manually for now, but I don't personally think it should be added to the SVN just to be removed shortly after when the new item stat code goes in.

Zeice
07-08-2009, 05:26 PM
Yeah, I figured it would only be temporary either way. Maybe this was the wrong forum, but just posted it incase anybody wanted to use it for now.

gaeorn
07-08-2009, 06:14 PM
Although, it might be nice to have a rule to adjust the BS damage across the board so if a server wanted to increase all BS damage by 10%, they wouldn't have to go edit every item in the DB that has BS damage.

Zeice
07-08-2009, 06:19 PM
Yeah, I was thinking about that, too. Although it only takes a small query to do that for items.

gaeorn
07-08-2009, 07:12 PM
But it has the advantage of leaving the items in a pristine state.

trevius
07-08-2009, 08:06 PM
I am not completely apposed to a rule for it, but I think we need to pick and chose what is really worth adding rules for. If we add a special rule for rogue BS damage, then why not add rules for every class damage, or spell effectiveness etc etc until it was overwhelming and bogging down the code? The main reason for adding a rule for monks is because it was added for stuff that items can't necessarily effect directly like their kick attacks. The archery rules are a bit of a special case as well.

For this particular case, it wouldn't exactly be a bad thing to have a rule, but it would be extremely easy to run 1 query on the items table to make the exact same adjustments you would make by changing that rule. And if you are worried about being able to get items to their original settings, just save the query and alter it slightly to run it in reverse. When I make changes to all items in the items table with queries, I always note them on my forums so I can easily undo them if ever needed.

I am sure that if KLS or the other devs like the idea of this rule, that it will be added. I just personally wouldn't add it myself for the reasons stated.

Zeice
07-08-2009, 08:22 PM
Looks like KLS just added the formula to draw from the backstab damage field in items on the SVN an hour ago, so this isn't needed now. =p

gaeorn
07-08-2009, 08:24 PM
Actually, I was thinking that eventually allowing the tweaking of character balance through rules for every class would be a great thing. If implemented properly it shouldn't bog down the code significantly. But in any case, I'm willing to go with whatever everyone prefers.

ChaosSlayerZ
07-08-2009, 09:05 PM
I am not completely apposed to a rule for it, but I think we need to pick and chose what is really worth adding rules for. If we add a special rule for rogue BS damage, then why not add rules for every class damage, or spell effectiveness etc etc until it was overwhelming and bogging down the code? The main reason for adding a rule for monks is because it was added for stuff that items can't necessarily effect directly like their kick attacks. The archery rules are a bit of a special case as well.

For this particular case, it wouldn't exactly be a bad thing to have a rule, but it would be extremely easy to run 1 query on the items table to make the exact same adjustments you would make by changing that rule. And if you are worried about being able to get items to their original settings, just save the query and alter it slightly to run it in reverse. When I make changes to all items in the items table with queries, I always note them on my forums so I can easily undo them if ever needed.

I am sure that if KLS or the other devs like the idea of this rule, that it will be added. I just personally wouldn't add it myself for the reasons stated.

Well yeah it depends on specific thing in question.
Spells I can easily modifiy in spell file. BS property for items - once it goes live, but few things stil remain out of reach. Such as - things like Harm Touch and Lay Hands are partialy hard coded in the source despite having a nice entries in spell file. (you cannot alter their refresh time for example). Would be nice to get back control over those things. (by simply allowing their properties to be read from spell data)

Shendare
07-08-2009, 09:32 PM
Of course, some things are hard-coded in the source because they are also hard-coded in the client.

ChaosSlayerZ
07-08-2009, 09:37 PM
Of course, some things are hard-coded in the source because they are also hard-coded in the client.

not those 2 things though =P
the client was perfectly happy with new refresh times I gave it, but server refused them
more info here
http://www.eqemulator.net/forums/showthread.php?t=28603

demonstar55
07-09-2009, 09:00 AM
not those 2 things though =P
the client was perfectly happy with new refresh times I gave it, but server refused them
more info here
http://www.eqemulator.net/forums/showthread.php?t=28603

zone\features.h line 169 and 170, change them yourself, or 0 to disable server side checking, from the comments I believe they're in seconds

trojansf5
09-28-2010, 01:41 AM
+BS does not work.

Rogue Backstabs should be able to break 10k with assassin's strike and epic 2.0.

We've tested quite a bit with the bug testing team and found that comparing rogues with zerks here versus on live met with a massive discrepancy.

The augs will correctly increase a weapon's normal damage number but the number used to compute backstab max hit does not receive the increase. (jagged glowing prism)

1) Damage augments e.g. jagged glowing prism are not currently having any affect on rogue backstab damage.
2) On live Rogues parse equivalent to zerks in tacvi/omens/2.0 gear
3) On EMU zerks outparse rogues significantly in the same gear configuration.



I believe the root issue of the problem lies in the calculation of backstab max hit (max and min hit are the two big determinants of backstab damage, these are calculated then sent to a general damage routine to determine how much damage is actually done). All of the variables in the max hit calculation are easily obtainable except one, it shows up in the code like this:
GetDamageTable(BACKSTAB)
I'm not very intimate with the emu server code so I have not been able to locate exactly what this does, but to venture a guess I'd say it is pulling a value from a table in the database. Based on data supplied by Wildd (thanks Wildd) I estimate that the current value this is returning for a lvl 70 rogue is about 273. Based on the second hand recollections of live data that I have from Wildd and Irrelevant (thanks guys) I estimate that this value should be somewhere in the 356-400 range for lvl 70 rogues to get the max backstab hit they deserve.

with duelist maxed, bs *6900 and some changes with duelist *4900 and epic, Fabled gear pieces,rest of time gear. Yeah our dps is broken, last parsed fight was vex 2400 dps zerker 2k dps monk 1600 dps rogue 1550 dps terraa rogue ( she is healing ) 600 dps on this fight. We had the mobs back at least 95 % of the time. I hope rogues dps will get fixed atm it really sucks to what the class should be the best at.. its only middle of the road.
*** i have maxxed over 150 accuracy ( with trib) best fero cleave combat effect 48 worn attack at least 100 over the cap ****

So my hypothesis is that this is not actually a bug but rather a lack of implementation of lvl 66-70 content. I'm guessing that the backstab damage table only contains values for rogues up to lvl 65. If I am right the solution should be easy (simply expand the table) once you have some good solid live data to pin down exactly where the 66-70 values should be.


1.) If rogue dps is deemed too low, a +backstab% skill modifier of a large amount or an increase to the cap (currently 235, capped both according to #myskills and the skills window) might be an elegant solution; it would increase only backstab damage and not modify agro generation at all.

Backstab: DB+DI*x(where x is an integer between 1 and 20, and where DB is 123)

Backstab 235+12% values:
25dmg weapon: DI = 48.5, DI20 = 1142
24dmg weapon: DI = 46.5, DI20 = 1097
20dmg weapon: DI = 37.5, DI20 = 919
15dmg weapon: DI = 26, DI20 = 690

Backstab 235 (no skill modifier) values:
15dmg weapon: DI = 22.5, DI20 = 618

Asuumed: DB is the same for all tests. My Strength, Attack, Accuracy, and AAs were the same throughout the parse.
DI is a function of weapon damage times backstab modifier times some variable. It was assumed that it was (weapon_dmg*backstabskill/100), but this does not appear to be the case; there must be some other monkey-wrench involved. The difference between DI intervals on a modifier of 12% (going from 235 to 262) is relatively colossal; this was only noticeable on such a lower level dagger because any dagger post-Ifir has the backstab mod on it.

I played rogue for 8 years ( or longer ) on live i love the class i can deal with all of its shortfalls and ill try to be patient while we work on this but really i mean come on really? from a mobs back we should out dps monks (equal gear and aa) and Berzerkers should not be 2x rogue dps ( equal gear and aa) if the state things are acceptable to all the non rogues then everytime a new rogue asks me a question i will do my best to scare them into a class that dosnt SUCK

Its been tested, now it needs to be solved.
Thank you,
Nevuti the Irreverent Server.

( Credit to: Terraa, Wiild, Nevuti, Irresponsible, Irrelevant )
http://irreverentlabs.com/EQ/

Vexium
09-28-2010, 03:12 AM
I'm here to confirm that (at least on Irreverent server) there seems to be something wrong with rogue's Backstab damage post-level 65.

I think Nevuti is very passionate about his class, and his information (along with others') has provided insight into the nature of a problem that we at the Irrevent imagine rogues are facing throughout EMU.

lerxst2112
09-28-2010, 04:24 AM
In the current emulator code, GetDamageTable(BACKSTAB) returns 305 for a level 70 rogue. The function is in attack.cpp.

The relevant part is here:

int16 dmg_table[] = {
275, 275, 275, 275, 275,
280, 280, 280, 280, 285,
285, 285, 290, 290, 295,
295, 300, 300, 300, 305,
305, 305, 310, 310, 315,
315, 320, 320, 320, 325,
325, 325, 330, 330, 335,
335, 340, 340, 340,
};

if(GetClass() == MONK)
return (dmg_table[GetLevel()-51] * (100+RuleI(Combat,MonkDamageTableBonus))/100);
else
return dmg_table[GetLevel()-51];

The actual formula for the max hit is:

max_hit = (((2*backstab_dmg) * GetDamageTable(BACKSTAB) / 100) * 10 * GetSkill(BACKSTAB) / 355) + ((level-25)/3) + 1;


backstab_dmg is the number from the backstab damage field on the weapon. If you substitute your actual weapon damage and skill values into the formula it should help to see if the max is matching up.

trojansf5
09-28-2010, 02:49 PM
Thanks for the support, and Many thanks for the actual code. It means a lot, even to other players that are as passionate about their class as I'am to mine.

Irreverent
09-29-2010, 12:18 PM
Nevermind, I see the spam. Tsk..tsk.

But, this is good research and follow up and I am so proud of the EMU community coming together to assist in this!

Scendera
02-15-2011, 03:53 PM
Yeah, the new backstabdmg field in the items table will work for all clients once it is added to actually be factored into the source code. I don't see much of a reason for a rule for this since the new field should make it easy enough to fully customize all bs damage for all items, or even just for specific weapons as needed.

Very elegant...thank you. Will this work on summoned weapons for water pets also?