Just some thoughts around how to remodel resistances:

Currently 100% resistance to an attack type is very powerful, and 95% is nice, but can still be substantially worse than 100%, especially at high levels.

To change this:

remove the idea of resist% and introduce resist points.

Every attack that is made rolls against ac in order to decide whether it hits or not, for each attack there are a number of points 'spare' that exceeded the minimum roll to hit. - we call this the attack_excess.

If the attack_excess is more than twice the resist points for the type of attack, then this is a 'critical' attack, and the damage is multiplied by a random value between 2 and 3.

otherwise we multiply the attack_excess by the amount of damage the attack wants to do, we will call this the damage_potential.

we now divide the damage_potential by the resist points, and get from that the total amount of damage to deal.

So, if we are attacked by a creature that rolls 10 points more than he needs to attack us, and would do 20 damage, his attack_excess is 10, his damage potential is 200.

if our resistance to this attack is below 10 points, then this will be a 'critical' hit and do 40-60 damage.

if resistance is 10 points, damage is 20 if resistance is 20 points, damage is 10 if resistance is 30 points, damage is 6 (round down?) if resistance is 40 points, damage is 5 if resistance is 200 points, damage is 1

above 200 points, no damage would be taken from that attack, but if the next to-hit roll were better, then damage could be taken from the second attack.

So, what is 'good' resistance?

Good values for resistance are more than twice the possible 'to hit' rolls that monsters you are facing can make, this will increase as you go up levels.* Doubling the amount of resistance you have will always halve the amount of damage you take.

If you have inadequate resist points, then you will take critical hits all the time, a first level character fighting a level 20 monster should expect every (ie, the) hit against them to be a critical unless they have some seriously out-of-level equipment.

Different stats would give some resist points for various types of attacks, probably with a bonus of something like +0 at a value of 10, and +5 for every 1 above that, -5 for every 1 below that. - or roughly whatever is enough to ensure you probably won't take critical hits 90% of the time against creatures up to 10 levels higher than the appropriate stat. (although you would expect to take maximum damage or close to it for almost every attack).

Dex and Con shouldn't feature that much in the table below, since they are more about avoiding being hit in the first place and having the HP to weather the damage when it is dealt respectively.

STR, DEX, CON, INT, WIS, POW, CHA

Attack Type Stat
PHYSICAL STR
MAGIC POW, INT, WIS (all three, or lowest of the 3?)
FIRE POW, INT, WIS (all three, or lowest of the 3?)
ELECTRICITY POW, INT, WIS (all three, or lowest of the 3?)
COLD POW, INT, WIS (all three, or lowest of the 3?)
CONFUSION INT
ACID STR
DRAIN INT?
WEAPONMAGIC POW, INT, WIS (all three, or lowest of the 3?)
GHOSTHIT INT?
POISON STR
SLOW CON?
PARALYZE CON?
TURN_UNDEAD WIS
FEAR WIS
CANCELLATION unsure
DEPLETE INT?
DEATH POW?
CHAOS WIS
COUNTERSPELL INT
GODPOWER WIS - when resistances can't reach 100% having some resist points in this may be ok - although generally this is used as 'the player really, really ought to die here' so maybe not.
HOLYWORD WIS
BLIND STR?
INTERNAL unsure - what is this anyway?
LIFE_STEALING STR?
DISEASE CON?

* what these values are will depend on how ac/wc are reworked