A wonderful Warrior Aggro thread on Blizz forums
#23
chippydip,Jul 19 2005, 10:07 AM Wrote:At this point I think it may be less of a sure bet that the servers are using fixed-point math. The performance difference has narrowed considerably since the D2 days. I agree, though, that even if floating point is being used, the numbers should still come out to nice integers for "human" reasons ;)
While I agree that they have been making good improvements in how many computers will handle their floating point operations, none of the algorithms I have ever heard of have managed to get away from needing to do the equivalent of 4+ interger operations to handle an arbitrary floating point calculation. The major speed ups in the floating point systems has been by having the system better able to 'recognise' when it can simplify a floating point operation to one of the few cases where it can be handled as one of the special 1 or 2 step integer calculations (with an addition integer calculation to renormalise the final result) or by the use of extensive internal look up table to replace actual calculations entirely. It still comes down to the integer calculation only processes beating the floating point systems in speed and accuracy. The integer only processes just do not have as huge of an advantage over the floating operations as they had about 10 years ago (much greater than a factor 4 back then).

Quote:The only problem I see with trying to fine the "basic unit of hate" is that it will complicate research terribly each time the more data is discovered and the base unit is refined. If all damage ends up generating the same amount of hate, it might be easier to just define some arbitrary unit, like 1 damage = 1 hate, and be done with it.
Yes, this definitely looks like we are off by a power of 2, but I think its probably larger than 8ths...
-clip-
If they are indeed using fixed-point math, I wouldn't at all be surprised if they are using the same fixed point library they used in D2. This would mean 256th which is a fairly common choice in fixed-point libraries. The only way to be sure, however, is to find some tests where you can detect the rounding errors and imply the precision from that. As of now, we don't have nearly enough data to make any definite conclusions, but my money's on 256th.
I agree that is likely more than a factor of 8ths, but there is not enough information right now to provide more accuracy than that. Also there were many portions in Diablo2 that were set up to track and handle several of the variables only in 8ths as the smallest increments. It was just that most players were more consistently interested in their Life and Mana and what ever game mechanics that worked on those 2 stats; and those 2 stats did use the 256th scale for handling their data. The techniques for handling in 1/8ths is just as simple to use and just as well supported as the 256th scale was.

Diablo 2 also used a system that did data updates for things like healing and slow damage effects that used a 1/25th second time scale to do its duty cycle on this stuff. World of Warcraft appears to be doing its duty cycle for such things on a longer time increment of between 1 second and 3 seconds. With the much larger time scale for doing the game maitence duty (like DoTs and HoTs) there is not as much need to have a very fine graduation of things like damage or other similar effects.

Quote:I see the "healing*3" as being problematic since testing indicates that PW:S is about 1/2 the aggro per point as normal healing. We also have Paladin self-heals which are supposed to generate less aggro per point that normal heals IIRC. With only 2/8 and 1/8 as lower values, this clearly seems too small an increment.


Even this simple example shows a possible weakness with 1/8 units, depending on how aggro bonuses are calculated. Is the base factor modifed in defensive stance like: 8 * 1.1 = 8.8 which rounds to 8 (remember, in the D2 fix-point world, remainders were always truncated). This means defensive stance would have no effect on aggro. Now, it doubt this is really the case, but I don't have enough info to even be sure of this. Even qualitatively, I think it would be quite difficult to see the effect of 10% extra hate when playing. More likely, any differences are a result of 10% less damage and, therefore, 10% less healing. If Defiance is used, a 25% bonus would be much more noticeable, but it would also effect the calculations with even these coarse numbers (8 * 1.25 = 10).

In both these cases you are starting to make assumptions that do not really reflect how things would occur in the game. The first is that cases you are looking at could or would occur normally in the game. And the second is how the game does go about handling some of the cases that may in fact be what would appear to be special cases if looking at the code. The D2 combat system was rife with this later type of conditional operations.

In the first case you are looking at a Power Word: Shield. So far most of seem to be looking at the hate generation probably being a *k factor of damage/healing/other numeric + fixed value of the skill(rank X) in question. Last time I looked at the various PW:S skills, they all gave a fixed shield strength. This type of skill is ideal to be set up as a *zero multiplier and +fixed hate way of adding to the hate. In the case of the PW:S the hate is likely the shield strength divided by 2 times the standard heal multiplier. In the scale I am suggesting this would be
rank 1: 66 hate
rank 2: 132 hate
rank 3: 237 hate
...
rank 10: 1413 hate

Some of these values might be more easily tested to see how precisely they line up to what I listed here or to a more human centric value like say 1400 or 1500 for the rank 10 version. Note that all three values (1400, 1413, 1500) are likely close enough to that halfway point that it would be difficult to distinguish without careful testing.

So note Chippy that at no point for this case did there need to be a finier graduation than the 1/8 scale I listed earlier.

Now on the second case, I do remember quite well that the integer calculations are going not have an fractional amount left; I have reminded others of that all to often. But you on the other hand appear to not recall how they went about doing those bonus to base value calculations from the example you gave. You also seem to be using the case of 1point of damage (=8 hate) to try to make your case. Most integer systems like this tend to give quirky and odd results at very low values. They did so much so that both in v1.00-1.09 and v1.10 of D2 that they used special case code for weapon damage and enhanced damage on those weapons to make sure they actually did have a true damage increase. They did not do such special coding in some of the other areas of D2 where the descrpencies would not readily show to most players that did not do detailed examinations of what was happening. This is why I made the comment to Olon97 about the different ranks having different +hate factors; it should be easier at the low damage/healing levels to more easily tease out some of the base mechanics is someone so desires instead of using much larger values like is usually done with level 60 characters with full spreads of various talents.

To do a more realistic example of how defensive stance and/or defiance would end up applying in the game, trying using some damages that are more in line with with what a level 10 warrior (required to get defensive stance) or 20-24 warrior (20 being the minimum to aquire the Defiance talent) would likely be doing. I will use a somewhat low damage value of say 30 damage in this case.

Hate for battle stance no talents
30 damage*8hate/damage= 240 hate

hate for defensive stance no talents
( ((30*(100-10))/100) *8*(100+10) )/100 =
( ((30*90)/100) *8*(110) )/100 =
( ((2700)/100) *8*(110) )/100 =
( 27 *8*(110) )/100 =
( 23760 )/100 = 237 hate <-possibly why some can do just as well with an arms-fury spec as they do with being in defense stance.

hate for defensive stance and full defiance talent.
( ((30*(100-10))/100) *8*(100+10+15) )/100 =
( ((2700)/100) *8*(125) )/100 =
( 27 *8*125 )/100 =
( 27000 )/100 = 270 hate

I would say in both these cases using better examples and the same type of methods for doing the bonus affects as would have been used in D2, it is much easier to see what the bonuses of using defensive stance and defiance would be like. Also if you assume that the damage after the penalty for being in defensive stance were still a 30 point damage applied to the target, then the hate values would be 264 and 300.

Reply


Messages In This Thread
A wonderful Warrior Aggro thread on Blizz forums - by Ruvanal - 07-19-2005, 11:27 PM
A wonderful Warrior Aggro thread on Blizz forums - by epssus - 09-13-2005, 04:19 PM
A wonderful Warrior Aggro thread on Blizz forums - by savaughn - 11-14-2005, 05:04 PM
A wonderful Warrior Aggro thread on Blizz forums - by savaughn - 11-22-2005, 08:23 AM

Forum Jump:


Users browsing this thread: 1 Guest(s)