D&D (2024) The math of the GWF Fighting Style and why its as good as a +1 (and possibly better than defense)

Horwath

Legend
GWF style is terrible unless it applies to ALL dice rolled, then it's OK, but you need to gather those dice and more of lesser dice the better.

If it only works for base weapon damage dice, it needs an upgrade as it simply is not worth taking over simple and again not great +1 AC or maybe better 10ft if blindsight, just to be safe vs magical darkness, fog of whatever.

now if it gains a increased bonus depending on a die rolled:
d4; min roll 3
d6; min roll 4
d8; min roll 5
d10; min roll 6
d12; min roll 7

it would have been on average FS, nothing special.
 

log in or register to remove this ad

Because you want to lift the floor of your damage, ensuring a run of bad luck in any individual combat doesn't bring your DPR down in that encounter
So ... GWF does something to help prevent you missing? If you're worried by bad luck get a graze weapon
Yes that comes at a cost of -1 AC, but if you want the highest possible DPR for your martial character, GWF, GWM, and Cleave
Oof. I'm not sure about this; you're wielding a greataxe or halberd (I think) if you want cleave. And while I fully accept that 0.25 damage per swing on the greataxe >0 I don't see it as even vaguely worth.
 

OB1

Jedi Master
So ... GWF does something to help prevent you missing? If you're worried by bad luck get a graze weapon

Oof. I'm not sure about this; you're wielding a greataxe or halberd (I think) if you want cleave. And while I fully accept that 0.25 damage per swing on the greataxe >0 I don't see it as even vaguely worth.
On your first point, I'm talking about the bad luck of rolling your damage die any particular round or combat. It can be a 4 point difference each individual attack. And that's the whole point, two handed weapons already have a great top range, with GWF you now also have the best floor, at 4 or 6 compared to 3 (with dueling style).

On the second, I meant Graze, not Cleave (still working on cramming all the weapon masteries into my head).
 

Asisreo

Patron Badass
sure but why take a crappy damage bonus, when I can take a rock solid AC bonus? Its not like great weapon fighters don't take damage.
OK, fine. How about this:

I made a simulation that takes two fighters, both level 20. They are fighting an enemy. We assume the fighters have a 65% chance to hit the enemy. One fighter deals 2d6 + 6 damage to represent the fighter with GWF and the other does 2d6+5 as a defense-fighter. The enemy has a 65% chance to hit the first fighter while they have a 60% chance to hit the second fighter.

The fighters are purely going to attack 4 times each before the enemy gets a chance to attack and deal anywhere from 30 - 70 damage. This approximates the damage that each fighter could be expected to take at level 20 in a single turn, its somewhat low because of situations where the enemy decides to do less damage but AoE, the enemy attacks somewhat else, the enemy is stunned, the fighter gets healed, etc.

The fighter's hp is set to 224. The enemy's HP is randomly chosen between 1 and 169 to represent uncertainty of their health from mooks to bosses (169 is the tarrasque's health divided by 4, to represent each other player pulling their weight).

The simulation outputs the number of times the fighter dies and the average number of turns each fighter needs to defeat the enemy per combat when they don't die.

I iterated this simulation 10,000 times. The output I got was:

Number of deaths for Fighter 1 (2d6+6 damage, 65% hit probability): 5616
Number of deaths for Fighter 2 (2d6+5 damage, 60% hit probability): 5475
Average turns for Fighter 1 (2d6+6 damage, 65% hit probability): 4.76
Average turns for Fighter 2 (2d6+5 damage, 60% hit probability): 5.15

The difference between the fighter's death are 141 deaths. Out of the 10,000 enemies, the +1 AC bonus mattered for 1.41% of them. In contrast, the +1 damage reduces the average turns needed to kill by 0.39, meaning that after 3 combats, you killed an enemy quicker than you would have without GWF.

I don't know about you, but I don't think I'll make it to 10,000 enemies in a campaign, and if I do, I don't think it wise to take the extra 1% extra death insurance rather than saving 333 rounds against an enemy. If not for survival purposes, it end the combat quicker.

If you have a problem with my assumptions and think that your assumptions would be more realistic, be my guest.

C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM_SIMULATIONS 10000
#define HP 224

// Function to simulate rolling two dice and adding the damage with a bonus
int roll_damage(int bonus) {
    int roll1 = rand() % 6 + 1;
    int roll2 = rand() % 6 + 1;
    return roll1 + roll2 + bonus;
}

// Function to simulate the probability of getting hit
int is_hit(double probability) {
    return (rand() % 100) < (probability * 100);
}

// Function to simulate the number of attacks before getting hit
int attacks_before_hit(double attack_probability) {
    int attacks = 0;
    while (attacks < 4 && is_hit(attack_probability)) {
        attacks++;
    }
    return attacks;
}

// Function to simulate a single fighter's attempt to reach the target damage threshold
int simulate_fighter(int target_damage, int damage_bonus, double hit_probability) {
    int current_damage = 0;
    int turns = 0;
    int hp = HP;

    while (current_damage < target_damage && hp > 0) {
        // Determine the number of attacks before the fighter is hit
        int num_attacks = attacks_before_hit(0.65);  // Both fighters attack with 65% probability

        // Apply the attacks
        for (int i = 0; i < num_attacks; i++) {
            // Roll damage
            int damage = roll_damage(damage_bonus);
            current_damage += damage;
            turns++;

            // Check if the fighter gets hit after each attack
            if (is_hit(hit_probability)) {
                int attack_damage = rand() % 41 + 30;  // Attack damage from 30 to 70
                hp -= attack_damage;
                if (hp <= 0) {
                    return -1;  // Fighter lost all HP before reaching the target
                }
            }
        }
    }

    if (hp > 0) {
        return turns;  // Return the number of turns required if the fighter survived
    } else {
        return -1;  // Return -1 if the fighter died
    }
}

int main() {
    srand(time(NULL));  // Seed the random number generator

    int deaths_fighter1 = 0;
    int deaths_fighter2 = 0;
    double total_turns_fighter1 = 0;
    double total_turns_fighter2 = 0;
    int survivals_fighter1 = 0;
    int survivals_fighter2 = 0;

    for (int i = 0; i < NUM_SIMULATIONS; i++) {
        int target_damage = rand() % 169 + 1;  // Random target damage between 1 and 169

        // Simulate Fighter 1
        int result1 = simulate_fighter(target_damage, 6, 0.65);
        if (result1 == -1) {
            deaths_fighter1++;
        } else {
            total_turns_fighter1 += result1;
            survivals_fighter1++;
        }

        // Simulate Fighter 2
        int result2 = simulate_fighter(target_damage, 5, 0.60);  // Updated hit probability to 60%
        if (result2 == -1) {
            deaths_fighter2++;
        } else {
            total_turns_fighter2 += result2;
            survivals_fighter2++;
        }
    }

    // Calculate average turns for each fighter
    double avg_turns_fighter1 = survivals_fighter1 > 0 ? total_turns_fighter1 / survivals_fighter1 : 0;
    double avg_turns_fighter2 = survivals_fighter2 > 0 ? total_turns_fighter2 / survivals_fighter2 : 0;

    // Print the results
    printf("Number of deaths for Fighter 1 (2d6+6 damage, 65%% hit probability): %d\n", deaths_fighter1);
    printf("Number of deaths for Fighter 2 (2d6+5 damage, 60%% hit probability): %d\n", deaths_fighter2);
    printf("Average turns for Fighter 1 (2d6+6 damage, 65%% hit probability): %.2f\n", avg_turns_fighter1);
    printf("Average turns for Fighter 2 (2d6+5 damage, 60%% hit probability): %.2f\n", avg_turns_fighter2);

    return 0;
}

And if my code looks kinda like spaghetti, it is. I wanted to write in python, but it would take far too long for the code to run, so its in C which I barely know how to code. I got assistance from ChatGPT, so also feel free to scrutinize the code itself, but it seems passable from my review.

And yeah, I know, whiteboard analysis, but I think the results are dramatic enough and the simulation takes enough cases into account that we can at least use it as a rough guide to our thinking.

Edit: 1.41% not .014% and 10,000 instead of 1,000
 
Last edited:

ezo

Get off my lawn!
the +1 AC bonus mattered for .014% of them.
Considering it actually mattered 1.41% of the time, I am wary of your other math (assuming this worked out as you intented...). ;)

But since I love running simulations, I'm game. What damage were the fighters taking on a hit--I must have missed it?
 

Asisreo

Patron Badass
Considering it actually mattered 1.41% of the time, I am wary of your other math (assuming this worked out as you intented...). ;)

But since I love running simulations, I'm game. What damage were the fighters taking on a hit--I must have missed it?
It was a random range from 30 - 70 damage.
 

ezo

Get off my lawn!
It was a random range from 30 - 70 damage.
Ah... Ok. I see that now. Thanks.

I think I would probably change some of the assumptions, such as the range of enemy hit points (1 to 169) to represent the hit points for creatures likely faced at level 20. As a single PC, this would be from CR 7 to 15, while as a party of 4 it would be from CR 19 to 24.

I'll see what I can do tonight, or tomorrow at the latest, and state my parameters when I am done.
 

Horwath

Legend
when comparing champions fighters with 20STR and 20CON in full plate going 1v1 with greatswords, +1 AC vs GWF is better on average for about half a round, so it comes down to initiative. when they switch to longbow if they are at range, with generous 12DEX, +1 AC is better for about round and a half, proving that +1 AC is OK fighting style with greatest advantage is versatility as you are not bound by weapon set-up(2Handed, ranger, 2WF or sword&board).
 

Asisreo

Patron Badass
when comparing champions fighters with 20STR and 20CON in full plate going 1v1 with greatswords, +1 AC vs GWF is better on average for about half a round, so it comes down to initiative. when they switch to longbow if they are at range, with generous 12DEX, +1 AC is better for about round and a half, proving that +1 AC is OK fighting style with greatest advantage is versatility as you are not bound by weapon set-up(2Handed, ranger, 2WF or sword&board).
A champion fighter can take both, so its even less of an opportunity cost.
 


Split the Hoard


Split the Hoard
Negotiate, demand, or steal the loot you desire!

A competitive card game for 2-5 players
Remove ads

Top