foundryvtt / dnd5e

An implementation of the 5th Edition game system for Foundry Virtual Tabletop (http://foundryvtt.com).
MIT License
333 stars 222 forks source link

Spell damage roll scaling with multiple damage types #1180

Closed aaclayton closed 3 years ago

aaclayton commented 3 years ago

Originally in GitLab by @jobo93

When casting a spell at higher level, which has a damage formula with two different damage types (for example: 2d6 cold and 2d6 fire) and for the level scaling "Spell Level" with 1d6, the second damage type in the formula won't scale like the first one.

We have some homebrew spells like this, which actually won't work for higher level casting now. Is there any workaround for this right now possible?imageimage

aaclayton commented 3 years ago

Originally in GitLab by @Pjb518

This is more about making it intuitive than accounting for things we can't do. We technically don't need the Level Scaling section of the sheet at all, as @item.level or @details.level can be used in all cases. We still have it though, because it's far easier for the users than working with these attributes.

At the moment, if a player wants to create Toll the Dead on their sheet, they either need to know about the quirky behaviour associated with not entering a value for level scaling, or they don't get to benefit from automatic level scaling.

Using my proposal, they would just enter 1d8 and 1d12 for the two scaling formulae.

There are also abilities which modify spells which would benefit from the same sort of change. While not an official class, one example which comes to mind is the Blood Domain Cleric from the Tal'Dorei Campaign Guide. They get to add necrotic damage to the damage of their levelled spells equal to 2 + the spell's level.

For any spell which doesn't already have necrotic damage, this is going to require adding another line of damage, and that damage has its own scaling.

I appreciate that we're talking about a small number of spells and effects, so this isn't a high priority change, but I find that players struggle with the concept of adding + @mod to their damage formula, so asking them to work with things like @item.levelis a big ask, IMO. If players can't set up the damage for their spells without having to resort to using these attributes, or using quirks like entering no value for level scaling, that highlights a place for improvement, imo.

aaclayton commented 3 years ago

Originally in GitLab by @Fyorl

Given that there are so few spells that deal multiple damage types (only 2, arguably 3 in the entire SRD), it's hard to see the benefit from such added complexity. It's already possible to customise the scaling behaviour on a per-part basis using the formula you demonstrated.

aaclayton commented 3 years ago

Originally in GitLab by @Fyorl

There aren't many official spells that deal two damage types that also scale. In the SRD I believe there are only two: Ice Storm, and Flame Strike. In neither of those two cases do both damage types scale with level. In Ice Storm only the bludgeoning damage scales, and in Flame Strike it's actually the caster's choice which of the two damage types they want to scale. Arguably Wall of Thorns has two damage types that both scale but, in practice, you'd likely implement it with the one damage part anyway (and that's what we currently do in the dnd5e system).

There's one official but non-SRD spell, Storm Sphere which does have two damage types, both of which scale, but that was the only one I could find.

Given that, I'd recommend no changes here, and that homebrew spell implementations instead use the inline scaling that @Pjb518 demonstrated.

aaclayton commented 3 years ago

Originally in GitLab by @Pjb518

@jobo93 Just to quickly help you with your problem, you can change the level scaling type to "None" and replace your damage formulas with this: (@item.level + 1)d6. @item.level is a reference to the casting level, so if your spell is cast at 1st level, the damage will be 2d6. If the spell is cast at 2nd level, the damage will be 3d6. Change the formula as needed for these homebrew spells you've created :slight_smile:

As for the issue more generally, there's an interesting difference in behaviour here between cantrip scaling and spell level scaling.

In the case of both cantrips and full-blown spells, putting a value in the scaling formula box simply adds that value to the first damage formula. However, if you leave the scaling formula empty, things change.

When you have cantrip scaling and you leave the scaling formula blank, every damage formula gets effectively multiplied as you get to each level threshold. So if we have a damage formula like 1d12 + 2d8, and another as 1d6, leaving the scaling formula blank will give you 2d12 + 4d8 damage from the first formula and 2d6 from the second formula (once the character reaches 5th level).

It seems sensible to me that the leaving the scaling formula blank for levelled spells could have a sensible default as well. Maybe we add one more die of the first damage die in each formula, for example.

That being said, I personally think we need a more expansive change to the way spell scaling is handled. I personally believe that if the user selects any kind of level scaling other than "None", they should be asked for a scaling value for each damage formula. This gives complete control to the user as to how spells scale.

The interface could look something like this: image

I think it would be a good idea to hide this second field until the user declares their intention to use level scaling to prevent confusion.

Obviously there would have to be significant changes to the data model and the way that spell scaling is handled to accompany this. Scaling would be a property of a specific damage formula, and the scaling would have to be applied on a formula by formula basis.

Naturally this would also necessitate a large update of the compendium also, at least for spells, and there would have to be a fallback or migration system in place for users who already have spells using the old system.