# Thread: A Solution to Block Scaling - A response to GC's Q

1. New Registrant
Join Date
Apr 2009
Posts
7

## A Solution to Block Scaling - A response to GC's Q

Source: Ghostcrawler
If only there was a mathematical operation we could perform that would scale the amount blocked to the size of the hit.
Source.

I am a very frequent reader of tankspot.com but this is my first post here. Although i am not much of a theorycrafter, i do believe that the issues with block have been a long standing issue. Ghostcrawler's post made me interested and i set about to find a way of scaling block with incoming damage.

I came up with the following -

- Remove Block Value as a stat from gear. (That is no gear should have Block Value as a seperate stat.). This would make designing gear easier, eliminate gimmick set and shield tanks wont have to sacrifice EH and Avoidance.

- Shield Slam and Shield of Righteousness scale directly from STR and not from BV (This is a good change because now even base BV scales only from STR)

- Block Value is solely acquired from strength at a rate of 1 str = 1 BV. Redoubt and Shield Mastery are still in place increasing BV by 30%.

- In addition to increasing BV by 30% Redoubt and Shield Mastery now offer an additional buff as follows.
***Each time the warrior/paladin receives damage froma physical hit he/she bolsters his/her defenses increasing Block Value further depending on the damage taken for 10 seconds. This effect cannot trigger more than once every 10 seconds.

Shield Slam or Shield of Righteousness damage would not scale from this additional buff.

I'm not much of a programmer but i wrote a little C++ simulation to illustrate how this would work.

I used my own paladin to get some average tanking stats, since my paladin is decently geared from 10 man ulduar and probably is a midway mark between undergeared tanks and very highly geared endgame tanks.
Ausrine

//Shield Block Scaling Simulation - The Block Modifier V1

#include <iostream>
using namespace std;

int main()
{
double health; //Total Health - Raid Buffed
double incoming; //Incoming Boss hit
double block; //Raid Buffed block value derived from strength at 1 str = 1 BV
double bscale; //Block Modifier Buff
double dmgratio; //Incomind Dmg/Total Health
int str; //Strength
int stam; //Stamina
double vitality;

//Some Average Raid Buffed Tank Stats (Assuming no Block Value Gear)
health = 40000;
block = 1800; //Block from strength alone at 1 str= 1 BV and applying redoubt
str = 1350; //Raid Buffed Strength
stam = 3000; //Raid Buffed Stamina

cout << "Please enter value of incoming damage : ";
cin >> incoming ;

//Determining Block Scaling depending on strength, stamina and Block Value
dmgratio = incoming/health;
vitality = (str+stam)/(block*2);

bscale = vitality/(1-dmgratio);
block = block*bscale;

cout << "Vital Stats \n";
cout << "Damage Ratio: " << dmgratio << "\n";
cout << "Vitality: " << vitality << "\n";
cout << "Block Scaling: " << bscale << "\n";
cout << "Buffed Block Value: " << block << "\n";
cout << "Dmg Reduction from Block: " << block/incoming*100 << "%" << "\n";

return 0;
}

What this buff does?

For a moderately geared tank ive taken around (Fully Raid Buffed)
1350 STR
3000 STAM
1800 BV (1 BV from 1 STR and 30% from redoubt or shield Mastery)

When the tank is hit the game determines the ratio of the damage done to the total health pool. Lets take a 20000 hit to a tank that has 40000 health. The damage ratio here is 0.5 i.e 50% of the tanks total health. I first decided to scale BV with respect to Damage ratio alone like this -
Buffed Block Value = Block Value/(1-dmg Ratio).

In our example of a 20k hit this would come to Buffed Block Value = 1800*2 = 3600. Now this value is a pretty decent damage reduction but it still doesnt scale well. So i added another modifier called 'Vitality' which depends on strength,stamina and Block Value. So the new scaling factor would be

****Check post 2 for updated formulas

Scaling Factor = vitality/(1-dmgratio)
***Vitality = (STR+STAM)/(BV*2)

hence buffed block value would be
Buffed Block Value = Block Value*Scaling Factor

For the same 20k hit the block value will now be 4500

The significance of vitality is that the scaling can be kept in control. If the developers feel that block is scaling too well all they have to do is slightly nerf the vitality equation.

Here are some of the results i got when i ran the simulation with different values of incoming hits.

I used my own paladins raid buffed stats.

**Note that block isnt working as a % reduction. the % damage reduction is shown here simply to signify the potency of mitigation via block.

Incoming Damage - 5000
Block Scaling -1.38
Buffed BV -2484
Damage Reduction% - 49.7%

Incoming Damage - 10000
Block Scaling -1.61
Buffed BV -2900
Damage Reduction% - 29%

Incoming Damage - 15000
Block Scaling -1.933
Buffed BV -3480
Damage Reduction% - 23.2%

Incoming Damage - 20000
Block Scaling -2.42
Buffed BV -4350
Damage Reduction% - 21.75%

Incoming Damage - 25000
Block Scaling -3.22
Buffed BV -5800
Damage Reduction% - 23.2%

Incoming Damage - 30000
Block Scaling -4.833
Buffed BV -8700
Damage Reduction% - 29%

Incoming Damage - 35000
Block Scaling -9.677
Buffed BV -17400
Damage Reduction% - 49.7%
Summary
- Eliminates the existence of gimmick sets because no matter how block is buffed at the moment progression will still demand EH and avoidance.
- Block scales with incoming damage and will finally prove to be a viable mitigation mechanic
- The paladin version of this ability could be made slightly weaker since paladins can mantain a higher block uptime.
- Will prevent the need to homogenise tanks, since druids have savage defense, DK's have self healing and shield wearers have block.
- As you can see the scaling is incredibly high when the incoming damage is high and it is a massive massive damage reduction. However this is just an idea, a groundwork which can obviously be tested and tweaked and balanced till the numbers are right.
- One thing i can think of the top of my head to prevent scaling from getting out of hand is to add another modifier to the scaling factor that decreases its value when the value of incoming damage increases. Ill try to think of a working formula for this but im pretty sure that it wont be a big issue from a mathematical point of view for the developers.

The main thing is that instead of applying band aid fixes all over the place and making patchy mechanics, one balanced mechanic can be implemented to avoid all the hassles of buffing BV, then nerfing it by putting DR on it. Furthermore the developers can design better gear for tanks over all as there is no more the need of putting BV on gear.

In any case this is just some thing i thought could be a step in the right direction. I am not an expert programmer or a mathematician so i wont know how this solution would stand from a technical point of view, but anyone who wants to refine the math and working behind this are more than welcome.
Last edited by Ausrine; 07-14-2009 at 05:35 PM.

2. New Registrant
Join Date
Apr 2009
Posts
7
Version 2 -
Worked on the scaling formulas to bring scaling down to earthly values when encountering very high incoming hits, while still keeping it useful on smaller hits.

What this buff does -
Places a buff on the tank when hit, which increases block value (depending on the size of the incoming hit) for a certain duration.
This will be tied into Redoubt or Shield Mastery
***Each time the warrior/paladin receives damage froma physical hit he/she bolsters his/her defenses increasing Block Value further depending on the damage taken for 10 seconds. This effect cannot trigger more than once every 10 seconds.

//Shield Block Scaling Simulation - The Block Modifier V2

#include <iostream>
using namespace std;

int main()
{
double health; //Total Health - Raid Buffed
double incoming; //Incoming Boss hit
double block; //Raid Buffed block value derived from strength at 1 str = 1 BV
double bscale; //Block Modifier Buff
double dmgratio; //Incomind Dmg/Total Health
int str; //Strength
int stam; //Stamina
double vitality;

//Some Average Raid Buffed Tank Stats (Assuming no Block Value Gear)
health = 40000;
block = 1800; //Block from strength alone at 1 str= 1 BV and applying redoubt
str = 1350; //Raid Buffed Strength
stam = 3000; //Raid Buffed Stamina

cout << "Please enter value of incoming damage : ";
cin >> incoming ;

//Determining Block Scaling depending on strength, stamina and Block Value
dmgratio = incoming/health;
vitality = (str+stam)/(block*6);

bscale =1+ (dmgratio*(1+vitality));
block = bscale*block;

cout << "Vital Stats \n";
cout << "Damage Ratio: " << dmgratio << "\n";
cout << "Vitality: " << vitality << "\n";
cout << "Block Scaling: " << bscale << "\n";
cout << "Buffed Block Value: " << block << "\n";
cout << "Dmg Reduction from Block: " << block/incoming*100 << "%" << "\n";

return 0;
}
Changes -

Changed Vitality - (STR+STAM)/(BV*6)
[Previous version was (STR+STAM)/(BV*2)]

Changed Scaling Factor - dmgratio*(1+Vitality)
[Previous version was Vitality/(1-dmgratio) ]

Buffed Block Value = Block + (Scaling Factor*Block)

Note the bold values in the new Vitality and Scaling Factor Formulas. These are the main controlling parameters of the buff. The devs can simply tweak these numbers to get the desired mitigation.

Here are some results with the new formulas.

**Note that block isnt working as a % reduction. the % damage reduction is shown here simply to signify the potency of mitigation via block.

V2 Results

Incoming Damage - 5000
Block Scaling -1.175
Buffed BV -2115
Damage Reduction% - 42.3%

Incoming Damage - 10000
Block Scaling -1.35
Buffed BV -2431
Damage Reduction% - 24.31%

Incoming Damage - 15000
Block Scaling -1.52
Buffed BV -2746
Damage Reduction% - 18.3%

Incoming Damage - 20000
Block Scaling -1.7
Buffed BV -3062
Damage Reduction% - 15.31%

Incoming Damage - 25000
Block Scaling -1.87
Buffed BV -3378
Damage Reduction% - 13.5%

Incoming Damage - 30000
Block Scaling -2.05
Buffed BV -3693
Damage Reduction% - 12.3%

Incoming Damage - 35000
Block Scaling -2.22
Buffed BV -4009
Damage Reduction% - 11.45%

Quoting Version 1 Results for easy comparison
V1 Results

Incoming Damage - 5000
Block Scaling -1.38
Buffed BV -2484
Damage Reduction% - 49.7%

Incoming Damage - 10000
Block Scaling -1.61
Buffed BV -2900
Damage Reduction% - 29%

Incoming Damage - 15000
Block Scaling -1.933
Buffed BV -3480
Damage Reduction% - 23.2%

Incoming Damage - 20000
Block Scaling -2.42
Buffed BV -4350
Damage Reduction% - 21.75%

Incoming Damage - 25000
Block Scaling -3.22
Buffed BV -5800
Damage Reduction% - 23.2%

Incoming Damage - 30000
Block Scaling -4.833
Buffed BV -8700
Damage Reduction% - 29%

Incoming Damage - 35000
Block Scaling -9.677
Buffed BV -17400
Damage Reduction% - 49.7%
As you can see from the previous results block value scales much more realistically and the block values are very much practical. Speaking in terms of % damage reduction this type of scaling suffers from diminishing returns as the incoming damage increases. You might ask why this is better than a static BV or changing BV to work as a flat % reduction much like armor which many have suggested. This type of dynamic scaling buff is more beneficial because first unlike a static BV this will increase as the incoming damage increases. Now although it provides decreasing % damage reduction as the incoming damage increases, the raw amount of damage mitigated is increased. Having block work as a flat % damage reduction like armor is also cumbersome and not feasible because a small % would make it worthless on bigger hits and a big % would make it over powered in different contents. In addition one might think if you want to make block a flat % modifier like armor why have them as 2 seperate stats in the first place?

In any case this revised version of block scaling provides better and dynamic mitigation which scales with incoming damage. Its no longer exponential in nature like the first version where block would scale upto unrealistic values at high incoming damage levels. It is open to further tweaking and suggestions and the paladin version could be made slightly weaker to compensate for the higher block uptime.

Paladins and warriors are already reporting Block Values upwards of 3k on the PTR. But obviously they have to gear specifically for BV which means they are sacrificing a bit of EH and Avoidance which is not desirable. If block scaling is implemented then that fixes more problems than just block being weak itself. First and foremost block mechanic becomes more effective which it should have been always. Secondly shield tanks can focus on progression gearing stats and more importantly reap more direct benefits from strength as not only it scales BV by a factor of 1 but also increases outgoing damage which is what warriors have been asking for a long time now.

I think instead of the band aid fixes to BV, this would prove to be much more simpler, effective and beneficial.
Last edited by Ausrine; 07-14-2009 at 05:35 PM.

3. New Registrant
Join Date
Apr 2009
Posts
7
Reserved

4. Raidslave
Join Date
Mar 2009
Posts
431
While I like the way this works it is an implementation not unlike Savage Defense for Druids. I do think that as much as this "works" for Druids Blizzard will want to keep it relatively unique to them, considering they have no Parry available.

In other words either the scaling would have to be near insignificant or this has grave implications for Druids especially - Death Knights can always be balanced via their Rune Enchants.

5. Prot4Life
Join Date
Nov 2008
Posts
292
Very nice tbh. I'm thinking to find out and post strength difference between PreNax>Nax>Ulduar gear so you can predict STR increase per each content patch, because this math only need proof that it wont get out of hand when gear scales more in next few patches.

Will post that when I get home

6. New Registrant
Join Date
Apr 2009
Posts
7
Thats the beauty of Block scaling like this. The equations although remain relatively simple, the devs can have complete control over the amount of scaling and can keep things in balance with just one implementation rather than increase SBV on items then put DR at a certain point and then modify other abilities like Shield Slam to not benefit from BV. All that can be avoided by this. Moreover even with the current values ive used for the scaling the block value buff isnt OP at all and infact is very much practical and atleast to me looks like what it should be on progression content.

So they can stop messing with BV as a seperate stat, scale shield slam and shield of Righteousness directly from strength, give 1 BV from 1 STR and implement this shield block scaling and it will solve more problems tbh.

Very nice tbh. I'm thinking to find out and post strength difference between PreNax>Nax>Ulduar gear so you can predict STR increase per each content patch, because this math only need proof that it wont get out of hand when gear scales more in next few patches.
It wont get out of hand, because the scaling formula is very flexible and very optimisable. If you can run C++ programs, try using the source and tinker with the bold values in my vitality and scaling formulas to get the desired amount of mitigation. The point is the devs can keep block under control without distubring additional stats/gear or anything. For example lets take Ignis 25 man. Lets say Ignis hits for around ~30000 dmg assuming he has 1 stack of the buff on him most of the fight. When i tank Ignis 25 i wear absolutely 0 BV items and run with around 1300-1400 raid buffed BV. For the sake of this example lets take a BV of 1800 assuming blizzard does decide to let STR convert to BV at a 1:1 ratio, in such a case assuming a BV of 1800 raid buffed is reasonable. For an incoming hit of 1800 the new block scaling buffs the tanks BV to 3693. Now 3693 isnt a very high value neither it is as negligible as 1800 is. In % damage reduction it provides a nice 12% dmg reduction. The point is block can finally be made an attractive stat, gear design is more optimisable as BV no longer is there on it, other stats and abilities do not have to be modified just to keep block value in line. Further more the devs can further tweak block scaling (increase or decrease) by simple adjusting the bold variables in the 'vitality' and 'block scalinf factor' formulas for a desired mitigation value. I think it has great potential for balance and effectiveness.

While I like the way this works it is an implementation not unlike Savage Defense for Druids. I do think that as much as this "works" for Druids Blizzard will want to keep it relatively unique to them, considering they have no Parry available.
I don't think this is anything like savage defense, because warriors and paladins already had block for a long time. It merely needed scaling with incoming damage, which is exactly what GC asked for. Savage defense depends on your AP while block scaling depends on incoming damage.
Last edited by Ausrine; 07-14-2009 at 04:35 AM.

7. I don't mean to derail anything, it's some fine ideas you have here, but I think GC's comment was at least partly facetious. It would not be hard to make block scale as a % of damage taken, that's how IBF, Shield Wall, Divine Protection, and Barkskin already work (but then, we already have those don't we?).

Also, my inclination, if you want to go to % reduction, is that rather than removing block value, make it a rating like we did with Armor Pen. The BV Rating influences the % absorption value on a successful block. The two rating system is already slightly clumsy though, makes for a lot (more) things to balance as a block-capable tank. I think, Ausrine, you are on to one thing that these values need to be pulled into other base values to allow it to scale a little more like Bear's SD.

I think GC's facetious(?) comment may be forshadowing of unannounced changes in the works. Blizz Devs do like their veiled references and fore-shadowing.

8. Registrant
Join Date
Mar 2009
Posts
63
I dont think DK self healing can be made analogous to block. Its only really prevalent in Blood. As Frost or UH I may use Death Strike here and again, but it is certainly not something in a normal rotation.

9. New Registrant
Join Date
Apr 2009
Posts
7
Originally Posted by Satorri
I don't mean to derail anything, it's some fine ideas you have here, but I think GC's comment was at least partly facetious. It would not be hard to make block scale as a % of damage taken, that's how IBF, Shield Wall, Divine Protection, and Barkskin already work (but then, we already have those don't we?).

Also, my inclination, if you want to go to % reduction, is that rather than removing block value, make it a rating like we did with Armor Pen. The BV Rating influences the % absorption value on a successful block. The two rating system is already slightly clumsy though, makes for a lot (more) things to balance as a block-capable tank. I think, Ausrine, you are on to one thing that these values need to be pulled into other base values to allow it to scale a little more like Bear's SD.

I think GC's facetious(?) comment may be forshadowing of unannounced changes in the works. Blizz Devs do like their veiled references and fore-shadowing.
Block wouldnt work like a % reduction at all. I just put it up as a % in the results table to let people have an idea of how potent block would be as a mitigation tool. The new block value buff simple scales up (not as a % but as a BV number) with respect to how large the incoming hit was relative to your own HP pool. Relative to your own HP pool is significant because it keeps the scaling in check in 10 and 25 man contents where tank HP pools differ by quite significant margins.

10. Monday Morning Lunatic
Join Date
Feb 2009
Posts
62
The problem with a static block value is that it's either useless on boss fights or massively overpowered for anything that isn't a boss fight. 1500 BV might not mean much on Vezax, but it's definitely noticeable in heroics, add tanking, and PvP. 4000 BV would definitely mean something on Vezax, but you'd be untouchable in heroics, pvp, etc. A scaling BV is the only real solution to this.

Also, I don't agree that a scaling block value would turn it into an armor stat. Armor is guaranteed, block is a random chance. In fact, isn't that the reason we don't consider block an armor stat right now? It wouldn't change with a scaling BV. You'd still have a % chance to stop extra incoming damage.

11. New Registrant
Join Date
Jul 2009
Posts
1
I am not sure but I like the idea of Block Scaling from a Base Stat Line like Strength the idea has some merit in it and could potentially resolve the current Block issue of not scaling.

As mentioned items would then need to be re-evaulated and Block Value removed from them completely and extra Strength added to the items to compensate.

Something to also acknowledge by doing this you are going to increase the amount of damage output of certain abilities by a marginal amount because the tanks overall strength is going to go up.

I do think however they should have the block score obtained from strength as a relatively base score then upon a hit their is a random element to how much the Tank actually blocks. They will always block this minimum score but they have a chance to block up to 50 - 60 % of the incoming damage on a good 'roll'

The idea behind it is that a Shield Tank might just have his shield in the right place at the right time and he might not. This is nice from a Tanking point of view because it's got that random element to just how hard the tank might or might not be hit so it will keep healers on their toes.

Essentially what I am saying is each time a Shield tank is hit some kind of random is generated and multiplied by their base block value. You would have to be careful to insure that the random element didn't scale too well but it could make for interesting concepts.