Posted: Mon Dec 11, 2017 10:30 pm
Just wanted to say thank you for the feedback. 😊👍
Welcome to the Gaming Den.
http://www.tgdmb.com/phpBB3/
There is that- the moronic 'bounded accuracy except when we forget' poster child.Cervantes wrote:I mean, let's not overlook Fighting Style: Archery here.
Just let players write their own feats.Dean wrote:I agree with the bonus feat for everyone at first level. I'm torn on the 4th level bonus giving ability bonuses and a feat not because it's too powerful, far from it, merely that there's only like 20 printed feats in all of fifth edition and I think giving every character an additional 5 feats might make everyone more identical rather than more unique. I'm willing to be swayed though, more customizability really would be great in 5e.
But then you'd need to write solid guidelines for what is worth a feat. And then people will write FAQs for the best feats it's possible to create and then everybody getting into the game will read the FAQs and play with just those feats.hyzmarca wrote:Just let players write their own feats.
That increases the number of available feats fom like 20 to literally infinite. And makes things extremely customizable. And is probably what feats should have been in the first place.
I did the check for Human Sharpshooter and it looks like the DPR is gonna be best even when accounting for AC. The -5 is big, sure, but +10 damage is a doubling of your bow's damage on each average attack at max Dex (9.5 -> 19.5). Gimme a piece of paper and some time and I'll figure out the exact breakpoint or whatever, something something "if your chance of hit is reduced less than 50% by the Sharpshooter feat then you should use it".Voss wrote:That's actually part of my point. If you're thinking of these feats as pure DPR maximizing, you're kind of missing how big that -5 is in this system.
Of your two real bonuses (stat and prof), -5 is all of one at its maximum value, and almost half of the total of the two (+11). A 20th level character with these feats attacks as a 3rd level character, plus or minus magic weapon bonuses that are 'supposedly' completely optional.
But if you actually mathed this out (at various levels, mapping attacks vs AC with a large sampling of monsters, both with out without the feats), I suspect you'd find that the two feats are actually a detriment to DPR quite often..
Code: Select all
from collections import namedtuple
Summary = namedtuple('Summary', ['level', 'ac', 'sharpshoots', 'dpr'])
def summary_printer(self):
out = "Level {}, ".format(self.level)
if self.sharpshoots:
out += "with "
else:
out += "without "
out += "Sharpshooter: Against {} AC, DPR = {}.".format(self.ac, self.dpr)
return out
Summary.__str__ = summary_printer
def prof(level):
return 2+(level-1)//4
def stat(level, rolled, getting_feat, is_fighter=True):
is_rogue = False
bonus = 4 if rolled else 3
asi_lvls = [4, 8, 12, 16, 19]
if is_fighter: asi_lvls.insert(1, 6)
if is_rogue: asi_lvls.insert(2, 10)
for _ in filter(lambda l: l <= level, asi_lvls):
if getting_feat:
getting_feat = False
else:
bonus += 1
return min(bonus, 5)
def chance_to_hit(armorclass, atk):
min_roll = min(20, armorclass-atk)
prob = 1.05 - .05*min_roll
return prob if prob < 1 else .95
def archer(level, has_sharpshooter,
extra_atk = 0, extra_dmg = 0,
is_human=True, rolled=False):
if level == 20:
attacks = 4
elif level >= 11:
attacks = 3
elif level >= 5:
attacks = 2
else:
attacks = 1
stat_bonus = stat(level, rolled, has_sharpshooter and not is_human)
dmg = 4.5 + extra_dmg + stat_bonus
atk = extra_atk + stat_bonus + prof(level)
if has_sharpshooter:
dmg += 10
atk -= 5
return lambda ac: attacks*round(chance_to_hit(ac, atk) * dmg)
if __name__ == "__main__":
test_lvls = (1, 5, 9, 14, 17)
test_acs = (5, 10, 13, 15, 18, 20)
sharps = []
norms = []
for lvl in test_lvls:
sharpy = archer(lvl, has_sharpshooter=True)
normy = archer(lvl, has_sharpshooter=False)
for ac in test_acs:
sharps.append(Summary(ac=ac, level=lvl, sharpshoots=True,
dpr=sharpy(ac)))
norms.append(Summary(ac=ac, level=lvl, sharpshoots=False,
dpr=normy(ac)))
for s, n in zip(sharps, norms):
print(s)
print(n)
print()