EasyMachinations

Letting 5e Players Roll Spell Attacks for Spells That Call for the Monsters to Make a Saving Throw

At my table, several players expressed frustration with having me as the DM roll saving throws against their spells. While they objectively know that random the chance of dice rolling applies to whether I'm rolling or they are, they still just didn't like that they declared a spell was cast and then they have to sit and wait for me to tell them the outcome based on one or more rolls I'm making. It felt too passive for them. In particular our melee bard, who liked stabbing people by rolling dice dramatically, playing up a bad roll or relishing a hit, but didn't like how spells like Vicious Mockery was resolved with me telling him if something missed or not.

Having played 4e, which had defenses based on attributes rather than saves as they appear in 5e, I thought I'd try to figure out how to transpose the math of a monster save so that each monster had essentially a attribute Armour Class based on each the 6 attributes. The goal was to ensure the chance of a hit was the same as the chance of a failed save. I was also intrigued by the potential to offload the dice management of another task to my players.

So in short, here's what I've come up with:

So the attribute AC is:

Showing my work:

Just to show how I came to this formula, here's a more detailed explanation with examples

So that's the baseline math, with your standard Level 1 PC attack and save #s, and a monster with a flat zero modifier. So if you raise or lower the ability modifier, you change the AC accordingly. If you have a better or worse spell save, the PC's spell attack math you should have already have figured out on your character sheet adjusts with the spell save DC.
Here's some examples of the math at work:

Where this breaks down, and potential fixes:

Below I'm covering some of the places where the game doesn't quiet work the same when you switch from saves to attack. I am sure I missed some cases, and I'm aware some of the potential fixes within and across categories are contradictory. Use what works best for your table.

Critical hits and misses

When a monster is making a save, there are no critical hits or misses, but when a PC is making a spell attack they do double dice damage on a natural 20 and miss against any AC on a natural 1. The natural 1 isn't really going to have an impact on moving from monster saves to PC attacks, in 99.999% of combats, given the low chance of a player attacking someone who the "1+ their spell attack" would otherwise hit if not for the critical fail rule that a 1 always misses.
The natural 20 on an attack, however, means the player is going to be looking for some kind of reward like double damage. If you do allow this, it would mean the PC damage output would be slightly increased over time if all your damaging spell saves are converted to spell attacks vs ability AC. Solutions to this includes:

Advantage and Disadvantage

Many monsters have abilities that grant advantage on certain saves (eg: vs poison, vs spells, etc) that wouldn't trigger when being targeted by attacks. Likewise there are abilities that can grant attack rolls advantage (eg: monster was hit by guiding bolt) or disadvantage (eg: monster is prone and being attacked at range), that wouldn't otherwise matter in cases where the monster should be rolling a save. In these cases, you could:

Legendary Resistances

Legendary Resistance only works on saves, so making attack rolls removes this ability from your most important foes. Solutions includes:

Area / multiple target saves

Normally each creature affected by a spell gets its own save. As such, to keep the math the same, the attacking PC should roll an attack vs each target. However:

Magic Items that Buff Only Spell Attacks or Spell Save DC

There are some cases that fork the math of spell save DC and spell attack that messes with the conversion. A spell focus that increase your PC's spell save DC by +1 would mean a PC with a 5% greater chance of connecting with a monster doing the save than if the PC attacked with their default spell attack #. Solutions include: