Larian Banner: Baldur's Gate Patch 9
Previous Thread
Next Thread
Print Thread
Joined: Sep 2016
journeyman
OP Offline
journeyman
Joined: Sep 2016
I'd very much like to change how saves vs debuffs work, to make the system a bit less binary. What I want to implement is a system where having 75 out of 100 physical armor grants you a 75% chance to resist physical debuffs, so you still need to apply damage before you CC, just not all the way down to 0. Does anyone have any idea what files I'd be looking at?

I've got moderate fluency with modding DOS:EE. I'm only just familiarizing myself with the D:OS 2 editor.

Joined: Nov 2016
Location: The Netherlands
apprentice
Offline
apprentice
Joined: Nov 2016
Location: The Netherlands
Sounds like an interesting concept wonder how it will workout ingame.

Joined: Sep 2017
Location: Brazil
journeyman
Offline
journeyman
Joined: Sep 2017
Location: Brazil
Baardvark was working on a D&D mod conversion. He stated not all mechanics would be converted to a D&D-like system, but saves were definitely on his radar, so the CC wouldn't be predictable and binary the way it is now.

Joined: Aug 2014
old hand
Offline
old hand
Joined: Aug 2014
Yup, have something cooked up here. It takes into account armor percentage, vitality, perseverance. I also tied in special resists to Stunned and Frozen, and would do the same with most other statuses probably. This script is USED by Base. Feel free to do your own thing with it or just use it for context. Have lots of other things going right now so won't be getting around to this too soon.

Kind of a clunky system but it works. You'll have to also go into the status data and remove the SavingThrow from statuses.

Code
INIT
	CHARACTER:__Me
	
	STATUS:%MagicStatus = null
	STATUS:%PhysStatus = null
	FLOAT:%CritResistMalus = 0.0

	
EVENTS

EVENT CritResistReduction
VARS
FLOAT:_Wits
CHARACTER:_Source
ON
	OnCriticalHit(_Source,_,_,_)
	ACTIONS
IF "c1"
CharacterGetStat(_Wits,_Source,Wits) // receiving a crit temporarily reduces your resist chance according to wits of critter
THEN
Multiply(_Wits,-0.01)
Set(%CritResistMalus,_Wits)
StartTimer("CritBonusReset",0.60,0)
ENDIF

EVENT CritReset
VARS
ON
OnTimer("CritBonusReset")
ACTIONS
Set(%CritResistMalus,0.0)


EVENT ResistMagicStatuses
VARS
STATUS:_Status
INT:_Pers
FLOAT:_PersRes
FLOAT:_MagicArmor
FLOAT:_Con
FLOAT:_Int
FLOAT:_Vitality
CHARACTER:_Source
ON
OnCharacterStatusApplied(__Me,_Status)
ACTIONS

IF "c1|c2|c3|c4|c5|c6|c7|c8|c9|c10|c11|c12|c13|c14"

IsEqual(_Status,BURNING)
IsEqual(_Status,POISONED)
IsEqual(_Status,SLOWED)
IsEqual(_Status,FEAR)
IsEqual(_Status,BLIND)
IsEqual(_Status,CHILLED)
IsEqual(_Status,DAZED)
IsEqual(_Status,MUTED)
IsEqual(_Status,CURSED)
IsEqual(_Status,NECROFIRE)
IsEqual(_Status,CHARMED)
IsEqual(_Status,MADNESS)
IsEqual(_Status,SLEEPING)
IsEqual(_Status,FIREBLOOD)

THEN

IF "!c1&!c2&c3&c4&c5&c6&c7&c8"

CharacterHasStatus(__Me,RANDOMMALUS) // IGNORE THIS, from my mod
CharacterHasTalent(__Me,Raistlin) // Glass Cannon users can't resist
CharacterGetStat(_MagicArmor,__Me,MagicArmor)
CharacterGetStat(_Con,__Me,Constitution)
CharacterGetAbility(_Pers,__Me,Perseverance)
CharacterGetStatusSourceCharacter(__Me,_Status,_Source)
CharacterGetStat(_Int,_Source,Intelligence)
CharacterGetStat(_Vitality,__Me,Vitality)

THEN

Add(_Vitality,-1.0) // Turn current vitality % into the percentage that's missing as a negative
Cast(_PersRes,_Pers) // Convert Perseverance from an integer to a float (fraction)
Multiply(_PersRes,.03)
Multiply(_Con,.015)
Multiply(_Int,-0.01)
Multiply(_Vitality,0.5) // halve the vitality penalty
Add(_Con,_Int)
Add(_Con,_MagicArmor)
Add(_Con,_PersRes)
Add(_Con,_Vitality)
Add(_Con,%CritResistMalus)


IF "c1&(c2|c3)&c4"
IsGreaterThen(_Con,.10)
IsLessThen(_Con,.9)
IsEqual(_Con,.9)
IsRandom(_Con)

THEN

Set(%MagicStatus,_Status)
StartTimer("MagicStatusTimer",0.50,0) // timer delay since a status can't seem to be removed within a script when the trigger was that status being applied

ELIF "c1"
IsGreaterThen(_Con,.9)
THEN
Set(%MagicStatus,_Status)
StartTimer("MagicStatusTimer",0.50,0)

ENDIF
ENDIF
ENDIF

EVENT ResistPhysicalStatuses

VARS
STATUS:_Status
INT:_Pers
FLOAT:_PersRes
FLOAT:_PhysArmor
FLOAT:_Con
CHARACTER:_Source
FLOAT:_Strength
FLOAT:_Vitality

ON
OnCharacterStatusApplied(__Me,_Status)
ACTIONS

IF "c1|c2|c3|c4|c5|c6|c7|c8|c9|c10"

IsEqual(_Status,CRIPPLED)
IsEqual(_Status,KNOCKED_DOWN)
IsEqual(_Status,PETRIFIED)
IsEqual(_Status,BLEEDING)
IsEqual(_Status,DECAYING_TOUCH)
IsEqual(_Status,DISARMED)
IsEqual(_Status,CHICKEN)
IsEqual(_Status,WEAK)
IsEqual(_Status,DISEASED)
IsEqual(_Status,INFECTIOUS_DISEASED)

THEN

IF "!c1&!c2&c3&c4&c5&c6&c7&c8"

CharacterHasStatus(__Me,RANDOMMALUS)
CharacterHasTalent(__Me,Raistlin)
CharacterGetStat(_PhysArmor,__Me,PhysicalArmor)
CharacterGetStat(_Con,__Me,Constitution)
CharacterGetAbility(_Pers,__Me,Perseverance)
CharacterGetStatusSourceCharacter(__Me,_Status,_Source)
CharacterGetStat(_Strength,_Source,Strength)
CharacterGetStat(_Vitality,__Me,Vitality)

THEN

Add(_Vitality,-1.0)
Cast(_PersRes,_Pers)
Multiply(_PersRes,.03)
Multiply(_Con,.015)
Multiply(_Strength,-0.01)
Multiply(_Vitality,0.5)
Add(_Con,_Strength)
Add(_Con,_PhysArmor)
Add(_Con,_PersRes)
Add(_Con,_Vitality)

IF "c1&(c2|c3)&c4"

IsGreaterThen(_Con,.10)
IsLessThen(_Con,.90)
IsEqual(_Con,.9)
IsRandom(_Con)

THEN

Set(%PhysStatus,_Status)
StartTimer("PhysStatusTimer",0.50,0)

ELIF "c1"
IsGreaterThen(_Con,.9)
THEN
Set(%PhysStatus,_Status)
StartTimer("PhysStatusTimer",0.50,0)

ENDIF
ENDIF
ENDIF


EVENT ResistStunned
VARS
INT:_Pers
FLOAT:_PersRes
FLOAT:_MagicArmor
FLOAT:_Con
FLOAT:_Int
FLOAT:_Vitality
INT:_Aero
FLOAT:_AeroResist
INT:_AeroSource
FLOAT:_AeroMalus
CHARACTER:_Source

ON
OnCharacterStatusApplied(__Me,STUNNED)
ACTIONS

IF "!c1&c2&c3&c4&c5&c6&c7&c8&c9"

CharacterHasTalent(__Me,Raistlin) // Glass Cannon users can't resist
CharacterGetStat(_MagicArmor,__Me,MagicArmor)
CharacterGetStat(_Con,__Me,Constitution)
CharacterGetAbility(_Pers,__Me,Perseverance)
CharacterGetAbility(_Aero,__Me,AirSpecialist)
CharacterGetStatusSourceCharacter(__Me,STUNNED,_Source)
CharacterGetAbility(_AeroSource,_Source,AirSpecialist)
CharacterGetStat(_Int,_Source,Intelligence)
CharacterGetStat(_Vitality,__Me,Vitality)

THEN

Add(_Vitality,-1.0) // Turn current vitality % into the percentage that's missing as a negative
Cast(_PersRes,_Pers) // Convert Perseverance from an integer to a float (fraction)
Cast(_AeroResist,_Aero)
Cast(_AeroMalus,_AeroSource)
Multiply(_AeroMalus,-0.05)
Multiply(_AeroResist,.15)
Multiply(_PersRes,.03)
Multiply(_Con,.015)
Multiply(_Int,-0.01)
Multiply(_Vitality,0.5) // halve the vitality penalty
Add(_Con,_AeroMalus)
Add(_Con,_AeroResist)
Add(_Con,_Int)
Add(_Con,_MagicArmor)
Add(_Con,_PersRes)
Add(_Con,_Vitality)
Add(_Con,%CritResistMalus)


IF "c1"
IsRandom(_Con)

THEN

Set(%MagicStatus,STUNNED)
StartTimer("MagicStatusTimer",0.50,0) // timer delay since a status can't seem to be removed within a script when the trigger was that status being applied

ENDIF
ENDIF

EVENT ResistFrozen
VARS
INT:_Pers
FLOAT:_PersRes
FLOAT:_MagicArmor
FLOAT:_Con
FLOAT:_Int
FLOAT:_Vitality
INT:_Water
FLOAT:_WaterResist
INT:_WaterSource
FLOAT:_WaterMalus
CHARACTER:_Source

ON
OnCharacterStatusApplied(__Me,FROZEN)
ACTIONS

IF "!c1&c2&c3&c4&c5&c6&c7&c8&c9"

CharacterHasTalent(__Me,Raistlin)
CharacterGetStat(_MagicArmor,__Me,MagicArmor)
CharacterGetStat(_Con,__Me,Constitution)
CharacterGetAbility(_Pers,__Me,Perseverance)
CharacterGetAbility(_Water,__Me,WaterSpecialist)
CharacterGetStatusSourceCharacter(__Me,FROZEN,_Source)
CharacterGetAbility(_WaterSource,_Source,WaterSpecialist)
CharacterGetStat(_Int,_Source,Intelligence)
CharacterGetStat(_Vitality,__Me,Vitality)

THEN

Add(_Vitality,-1.0) // Turn current vitality % into the percentage that's missing as a negative
Cast(_PersRes,_Pers) // Convert Perseverance from an integer to a float (fraction)
Cast(_WaterResist,_Water)
Cast(_WaterMalus,_WaterSource)
Multiply(_WaterMalus,-0.05)
Multiply(_WaterResist,.15)
Multiply(_PersRes,.03)
Multiply(_Con,.015)
Multiply(_Int,-0.01)
Multiply(_Vitality,0.5) // halve the vitality penalty
Add(_Con,_WaterMalus)
Add(_Con,_WaterResist)
Add(_Con,_Int)
Add(_Con,_MagicArmor)
Add(_Con,_PersRes)
Add(_Con,_Vitality)
Add(_Con,%CritResistMalus)


IF "c1"
IsRandom(_Con)

THEN

Set(%MagicStatus,FROZEN)
StartTimer("MagicStatusTimer",0.50,0) // timer delay since a status can't seem to be removed within a script when the trigger was that status being applied

ENDIF
ENDIF



Last edited by Baardvark; 16/09/17 04:30 PM.
Joined: Sep 2016
journeyman
OP Offline
journeyman
Joined: Sep 2016
Very cool Baardvark. Thanks for posting this.

Joined: Jun 2013
addict
Offline
addict
Joined: Jun 2013
indeed, thanks a lot


Un chemin de 1000 lieues commence par un premier pas.

Project:
Steam workshop Frontiere
Joined: May 2017
Location: California
member
Offline
member
Joined: May 2017
Location: California
This would be amazing, not going to lie. The armor/save system is just about my only misgiving about an otherwise stellar game.

Joined: Sep 2017
R
apprentice
Offline
apprentice
R
Joined: Sep 2017
Originally Posted by Baardvark
Yup, have something cooked up here. It takes into account armor percentage, vitality, perseverance. I also tied in special resists to Stunned and Frozen, and would do the same with most other statuses probably. This script is USED by Base. Feel free to do your own thing with it or just use it for context. Have lots of other things going right now so won't be getting around to this too soon.

Kind of a clunky system but it works. You'll have to also go into the status data and remove the SavingThrow from statuses.

Code
INIT
	CHARACTER:__Me
	
	STATUS:%MagicStatus = null
	STATUS:%PhysStatus = null
	FLOAT:%CritResistMalus = 0.0

	
EVENTS

EVENT CritResistReduction
VARS
FLOAT:_Wits
CHARACTER:_Source
ON
	OnCriticalHit(_Source,_,_,_)
	ACTIONS
IF "c1"
CharacterGetStat(_Wits,_Source,Wits) // receiving a crit temporarily reduces your resist chance according to wits of critter
THEN
Multiply(_Wits,-0.01)
Set(%CritResistMalus,_Wits)
StartTimer("CritBonusReset",0.60,0)
ENDIF

EVENT CritReset
VARS
ON
OnTimer("CritBonusReset")
ACTIONS
Set(%CritResistMalus,0.0)


EVENT ResistMagicStatuses
VARS
STATUS:_Status
INT:_Pers
FLOAT:_PersRes
FLOAT:_MagicArmor
FLOAT:_Con
FLOAT:_Int
FLOAT:_Vitality
CHARACTER:_Source
ON
OnCharacterStatusApplied(__Me,_Status)
ACTIONS

IF "c1|c2|c3|c4|c5|c6|c7|c8|c9|c10|c11|c12|c13|c14"

IsEqual(_Status,BURNING)
IsEqual(_Status,POISONED)
IsEqual(_Status,SLOWED)
IsEqual(_Status,FEAR)
IsEqual(_Status,BLIND)
IsEqual(_Status,CHILLED)
IsEqual(_Status,DAZED)
IsEqual(_Status,MUTED)
IsEqual(_Status,CURSED)
IsEqual(_Status,NECROFIRE)
IsEqual(_Status,CHARMED)
IsEqual(_Status,MADNESS)
IsEqual(_Status,SLEEPING)
IsEqual(_Status,FIREBLOOD)

THEN

IF "!c1&!c2&c3&c4&c5&c6&c7&c8"

CharacterHasStatus(__Me,RANDOMMALUS) // IGNORE THIS, from my mod
CharacterHasTalent(__Me,Raistlin) // Glass Cannon users can't resist
CharacterGetStat(_MagicArmor,__Me,MagicArmor)
CharacterGetStat(_Con,__Me,Constitution)
CharacterGetAbility(_Pers,__Me,Perseverance)
CharacterGetStatusSourceCharacter(__Me,_Status,_Source)
CharacterGetStat(_Int,_Source,Intelligence)
CharacterGetStat(_Vitality,__Me,Vitality)

THEN

Add(_Vitality,-1.0) // Turn current vitality % into the percentage that's missing as a negative
Cast(_PersRes,_Pers) // Convert Perseverance from an integer to a float (fraction)
Multiply(_PersRes,.03)
Multiply(_Con,.015)
Multiply(_Int,-0.01)
Multiply(_Vitality,0.5) // halve the vitality penalty
Add(_Con,_Int)
Add(_Con,_MagicArmor)
Add(_Con,_PersRes)
Add(_Con,_Vitality)
Add(_Con,%CritResistMalus)


IF "c1&(c2|c3)&c4"
IsGreaterThen(_Con,.10)
IsLessThen(_Con,.9)
IsEqual(_Con,.9)
IsRandom(_Con)

THEN

Set(%MagicStatus,_Status)
StartTimer("MagicStatusTimer",0.50,0) // timer delay since a status can't seem to be removed within a script when the trigger was that status being applied

ELIF "c1"
IsGreaterThen(_Con,.9)
THEN
Set(%MagicStatus,_Status)
StartTimer("MagicStatusTimer",0.50,0)

ENDIF
ENDIF
ENDIF

EVENT ResistPhysicalStatuses

VARS
STATUS:_Status
INT:_Pers
FLOAT:_PersRes
FLOAT:_PhysArmor
FLOAT:_Con
CHARACTER:_Source
FLOAT:_Strength
FLOAT:_Vitality

ON
OnCharacterStatusApplied(__Me,_Status)
ACTIONS

IF "c1|c2|c3|c4|c5|c6|c7|c8|c9|c10"

IsEqual(_Status,CRIPPLED)
IsEqual(_Status,KNOCKED_DOWN)
IsEqual(_Status,PETRIFIED)
IsEqual(_Status,BLEEDING)
IsEqual(_Status,DECAYING_TOUCH)
IsEqual(_Status,DISARMED)
IsEqual(_Status,CHICKEN)
IsEqual(_Status,WEAK)
IsEqual(_Status,DISEASED)
IsEqual(_Status,INFECTIOUS_DISEASED)

THEN

IF "!c1&!c2&c3&c4&c5&c6&c7&c8"

CharacterHasStatus(__Me,RANDOMMALUS)
CharacterHasTalent(__Me,Raistlin)
CharacterGetStat(_PhysArmor,__Me,PhysicalArmor)
CharacterGetStat(_Con,__Me,Constitution)
CharacterGetAbility(_Pers,__Me,Perseverance)
CharacterGetStatusSourceCharacter(__Me,_Status,_Source)
CharacterGetStat(_Strength,_Source,Strength)
CharacterGetStat(_Vitality,__Me,Vitality)

THEN

Add(_Vitality,-1.0)
Cast(_PersRes,_Pers)
Multiply(_PersRes,.03)
Multiply(_Con,.015)
Multiply(_Strength,-0.01)
Multiply(_Vitality,0.5)
Add(_Con,_Strength)
Add(_Con,_PhysArmor)
Add(_Con,_PersRes)
Add(_Con,_Vitality)

IF "c1&(c2|c3)&c4"

IsGreaterThen(_Con,.10)
IsLessThen(_Con,.90)
IsEqual(_Con,.9)
IsRandom(_Con)

THEN

Set(%PhysStatus,_Status)
StartTimer("PhysStatusTimer",0.50,0)

ELIF "c1"
IsGreaterThen(_Con,.9)
THEN
Set(%PhysStatus,_Status)
StartTimer("PhysStatusTimer",0.50,0)

ENDIF
ENDIF
ENDIF


EVENT ResistStunned
VARS
INT:_Pers
FLOAT:_PersRes
FLOAT:_MagicArmor
FLOAT:_Con
FLOAT:_Int
FLOAT:_Vitality
INT:_Aero
FLOAT:_AeroResist
INT:_AeroSource
FLOAT:_AeroMalus
CHARACTER:_Source

ON
OnCharacterStatusApplied(__Me,STUNNED)
ACTIONS

IF "!c1&c2&c3&c4&c5&c6&c7&c8&c9"

CharacterHasTalent(__Me,Raistlin) // Glass Cannon users can't resist
CharacterGetStat(_MagicArmor,__Me,MagicArmor)
CharacterGetStat(_Con,__Me,Constitution)
CharacterGetAbility(_Pers,__Me,Perseverance)
CharacterGetAbility(_Aero,__Me,AirSpecialist)
CharacterGetStatusSourceCharacter(__Me,STUNNED,_Source)
CharacterGetAbility(_AeroSource,_Source,AirSpecialist)
CharacterGetStat(_Int,_Source,Intelligence)
CharacterGetStat(_Vitality,__Me,Vitality)

THEN

Add(_Vitality,-1.0) // Turn current vitality % into the percentage that's missing as a negative
Cast(_PersRes,_Pers) // Convert Perseverance from an integer to a float (fraction)
Cast(_AeroResist,_Aero)
Cast(_AeroMalus,_AeroSource)
Multiply(_AeroMalus,-0.05)
Multiply(_AeroResist,.15)
Multiply(_PersRes,.03)
Multiply(_Con,.015)
Multiply(_Int,-0.01)
Multiply(_Vitality,0.5) // halve the vitality penalty
Add(_Con,_AeroMalus)
Add(_Con,_AeroResist)
Add(_Con,_Int)
Add(_Con,_MagicArmor)
Add(_Con,_PersRes)
Add(_Con,_Vitality)
Add(_Con,%CritResistMalus)


IF "c1"
IsRandom(_Con)

THEN

Set(%MagicStatus,STUNNED)
StartTimer("MagicStatusTimer",0.50,0) // timer delay since a status can't seem to be removed within a script when the trigger was that status being applied

ENDIF
ENDIF

EVENT ResistFrozen
VARS
INT:_Pers
FLOAT:_PersRes
FLOAT:_MagicArmor
FLOAT:_Con
FLOAT:_Int
FLOAT:_Vitality
INT:_Water
FLOAT:_WaterResist
INT:_WaterSource
FLOAT:_WaterMalus
CHARACTER:_Source

ON
OnCharacterStatusApplied(__Me,FROZEN)
ACTIONS

IF "!c1&c2&c3&c4&c5&c6&c7&c8&c9"

CharacterHasTalent(__Me,Raistlin)
CharacterGetStat(_MagicArmor,__Me,MagicArmor)
CharacterGetStat(_Con,__Me,Constitution)
CharacterGetAbility(_Pers,__Me,Perseverance)
CharacterGetAbility(_Water,__Me,WaterSpecialist)
CharacterGetStatusSourceCharacter(__Me,FROZEN,_Source)
CharacterGetAbility(_WaterSource,_Source,WaterSpecialist)
CharacterGetStat(_Int,_Source,Intelligence)
CharacterGetStat(_Vitality,__Me,Vitality)

THEN

Add(_Vitality,-1.0) // Turn current vitality % into the percentage that's missing as a negative
Cast(_PersRes,_Pers) // Convert Perseverance from an integer to a float (fraction)
Cast(_WaterResist,_Water)
Cast(_WaterMalus,_WaterSource)
Multiply(_WaterMalus,-0.05)
Multiply(_WaterResist,.15)
Multiply(_PersRes,.03)
Multiply(_Con,.015)
Multiply(_Int,-0.01)
Multiply(_Vitality,0.5) // halve the vitality penalty
Add(_Con,_WaterMalus)
Add(_Con,_WaterResist)
Add(_Con,_Int)
Add(_Con,_MagicArmor)
Add(_Con,_PersRes)
Add(_Con,_Vitality)
Add(_Con,%CritResistMalus)


IF "c1"
IsRandom(_Con)

THEN

Set(%MagicStatus,FROZEN)
StartTimer("MagicStatusTimer",0.50,0) // timer delay since a status can't seem to be removed within a script when the trigger was that status being applied

ENDIF
ENDIF




Baardvark, I like the idea of the decaying armor resist chance. But perhaps a proportional system is a bit too "heavy"? I don't exactly understand how the vitality and perseverance are plugged into the math equation but from my limited understanding its close-ish to....

EX:25/100 armor = 25% resist chance?

The predictability of armor vs status effects as it is currently is nice in it's own way but perhaps too certain. Making it proportional is perhaps too limiting to armor.

Maybe a middle ground with diminishing returns once you get past a certain threshold?

IE From 100-70% armor you are still at 100% resists, below that you start losing 5% resist chance for every 10% of armor you are missing.

60% armor = 10% effect penetration
50% armor = 15% effect penetration
40% armor = 20% effect penetration
30% armor = 25% effect penetration
20% armor = 30% effect penetration


Maybe it's just my line of thinking at the moment, but it seems like a middle ground where you can punch holes in armor to create a small window without heavily gutting the effectiveness of 20-50% armor.

I think some people want a little randomness to the mix but maybe without making it too random?



Last edited by Ranik; 17/09/17 11:38 AM.
Joined: Sep 2017
Location: Spain
stranger
Offline
stranger
Joined: Sep 2017
Location: Spain
Can this script be made into an standalone mod and updated to the Nexus?

The armor system is the first thing I thought about changing when I started the game. In the first game, I actually liked the way you could easily gain the upper-hand in a battle thanks to elemental and status effects, and armor and defended has totally eliminated this advantage in the second game. An standalone version of this script seems like a reasonable middle ground.

Thanks in advance.

Joined: Aug 2014
old hand
Offline
old hand
Joined: Aug 2014
Originally Posted by Ranik


Baardvark, I like the idea of the decaying armor resist chance. But perhaps a proportional system is a bit too "heavy"? I don't exactly understand how the vitality and perseverance are plugged into the math equation but from my limited understanding its close-ish to....

EX:25/100 armor = 25% resist chance?

The predictability of armor vs status effects as it is currently is nice in it's own way but perhaps too certain. Making it proportional is perhaps too limiting to armor.

Maybe a middle ground with diminishing returns once you get past a certain threshold?

IE From 100-70% armor you are still at 100% resists, below that you start losing 5% resist chance for every 10% of armor you are missing.

60% armor = 10% effect penetration
50% armor = 15% effect penetration
40% armor = 20% effect penetration
30% armor = 25% effect penetration
20% armor = 30% effect penetration


Maybe it's just my line of thinking at the moment, but it seems like a middle ground where you can punch holes in armor to create a small window without heavily gutting the effectiveness of 20-50% armor.

I think some people want a little randomness to the mix but maybe without making it too random


So constitution grants 1.5% resist chance per point, and perseverance grants 3% resist chance per point. However, intelligence/strength of the caster reduces resist chance by 1%. I'm thinking int and strength bonuses probably could be nixed, in which case, even with 0% armor, you'd have at least 15% chance to resist from Con (maybe then reduce the con bonus to 1%), plus any resist chance from perseverance. So that slightly slows down the armor scaling, but not quite as much.

You could probably double or increase resists you gain armor by 50%, and it would accomplish what you're asking for somewhat. That would mean (if doubled) you'd still have 100% chance to resist at 50% armor, and 50% chance to resist with 25% armor, etc. A 50% increase of the resist value of armor would mean at 50% armor, you'd have 75% chance to resist.

I like the simplicity of the 1 to 1 value of armor, but making it 50% more effective might make it slightly less extreme.

Joined: Aug 2017
Y
journeyman
Offline
journeyman
Y
Joined: Aug 2017
% percent of armor not seems reasonable as 200 armor and 10 armor shouldn't get the same penetration indeed a huge change of everything is required up to changing every char's stats for balance.

However Every Skill can be modified by Attribute formula for hit chance like many of other games in this kind.
But actually Divinity 2 is not based on specialized class system otherwise every skill will not have a %100 hit chance.
But it can still be modable to make the game specialized class system like fighters with high cons, str will have higher chance to their skills hit meanwhile even hit chance of weapons can be aranged up to this system but as i mentioned this is a huge change smile . So armor / magical armor will only block the damage not the status effect smile

I will think some of this in modding anyway nice opinions are coming.

Joined: Sep 2017
Location: Brazil
journeyman
Offline
journeyman
Joined: Sep 2017
Location: Brazil

Joined: Mar 2014
old hand
Offline
old hand
Joined: Mar 2014
Could someone please ask smarmbot to put this mod on the Nexus? In case he isnt around and doesnt see this post.

Also, thank you very, very, very much smarmbot.

Please put this on the nexus.



Moderated by  Larian_KVN 

Link Copied to Clipboard
Powered by UBB.threads™ PHP Forum Software 7.7.5