I have never liked how Savage Worlds has handled the possibility for a race to cause a character to have a penalty to an attribute. My solution is that in most cases there are two options, -1 or -2. Each increase will have it stay at a d4, but mitigate the penalty by -1. Additionally, I use alternate size rules where the character's size (positive or negative) is doubled and then modifies the character's strength die. After it gets to the maximum die, it becomes a modifier.
I will only share a couple of example scripts. I have no eval script inside my Weak (-1 strength) and Weakling (-2 strength) racial properties as they are accounted for in a script that also looks for the racial properties that lower Size (and therefore strength die steps).
The effects of this rule are that a character has to pay more to get out of the d4 die, but can eventually, and the maximum die is lowered in the process. A "d12" strength for a d4-2 strength race is d8. While it works great with weapons that check strength for damage and other requirements, there is an odd quirk that I cannot fix where skill costs during character creation treat it as being of a higher die. For some reason, the scripts for that do not look at the final trait die. There was no way for me to mark them as "creation only" and apply a penalty retroactively, so we are stuck with that quirk. It works fine while spending Advancements, however, so it only gives a possible bonus for characters being created. <shrug>
My -1 Vigor, called Fragile, has this text:
Initial Vigor is d4 -1. Its first increase will increase it to d4. The maximum is reduced by one.
The eval script is Traits, 4000, after Calc trtFinal, before Derived trtFinal
My -2 Agility, called Klutz, has the following text:
Initial Agility is d4 -2. Its first increase will increase it to d4-1, and its second increase will increase it to d4. The maximum is reduced by two.
The eval script has the same timing, phase, and before/after as above
My various sizes can be extrapolated from the code below. This code is in a mechanic, which I call Strength Penalty, that looks at the character. Small is a -1 .... Miniscule is -4.
The timing, phase, before/after are as above
Enjoy!
I will only share a couple of example scripts. I have no eval script inside my Weak (-1 strength) and Weakling (-2 strength) racial properties as they are accounted for in a script that also looks for the racial properties that lower Size (and therefore strength die steps).
The effects of this rule are that a character has to pay more to get out of the d4 die, but can eventually, and the maximum die is lowered in the process. A "d12" strength for a d4-2 strength race is d8. While it works great with weapons that check strength for damage and other requirements, there is an odd quirk that I cannot fix where skill costs during character creation treat it as being of a higher die. For some reason, the scripts for that do not look at the final trait die. There was no way for me to mark them as "creation only" and apply a penalty retroactively, so we are stuck with that quirk. It works fine while spending Advancements, however, so it only gives a possible bonus for characters being created. <shrug>
My -1 Vigor, called Fragile, has this text:
Initial Vigor is d4 -1. Its first increase will increase it to d4. The maximum is reduced by one.
The eval script is Traits, 4000, after Calc trtFinal, before Derived trtFinal
Code:
var value as number
value = #trait[attrVig]
value -=1
if (value < 2) then
perform #traitroll[attrVig,-,1,"Fragile"]
else
hero.child[attrVig].field[trtFinal].value = value
endif
Initial Agility is d4 -2. Its first increase will increase it to d4-1, and its second increase will increase it to d4. The maximum is reduced by two.
The eval script has the same timing, phase, and before/after as above
Code:
var value as number
value = #trait[attrAgi]
value -=2
if (value < 2) then
if (value = 0) then
perform #traitroll[attrAgi,-,2,"Klutz"]
else
perform #traitroll[attrAgi,-,1,"Klutz"]
endif
hero.child[attrAgi].field[trtFinal].value = 2
else
hero.child[attrAgi].field[trtFinal].value = value
endif
The timing, phase, before/after are as above
Code:
var strength as number
var size as number
var weak as number
var modifier as number
strength = #trait[attrStr]
size = 0
weak = 0
~ Determine small size (Size does not exist at this stage).
if (hero.tagis[RacialProp.rpSzSmall] = 1) then
size = -2
endif
if (hero.tagis[RacialProp.rpSzDiminu] = 1) then
size = -4
endif
if (hero.tagis[RacialProp.rpSzTiny] = 1) then
size = -6
endif
if (hero.tagis[RacialProp.rpSzMinisc] = 1) then
size = -8
endif
~ Determine weakness.
if (hero.tagis[RacialProp.rpWeak] = 1) then
weak = -1
endif
if (hero.tagis[RacialProp.rpWeakling] = 1) then
weak = -2
endif
~ Determine total strength modifier.
modifier = size + weak
if (modifier < 0) then
strength += modifier
~ if strength is adjusted to lower than d4.
if (strength < 2) then
~ Strength die is locked at d4, then a penalty is applied.
var remainder as number
remainder = strength -2
hero.child[attrStr].field[trtFinal].value = 2
perform #traitroll[attrStr,+,remainder,"Weak/Small Size"]
else
hero.child[attrStr].field[trtFinal].value = strength
endif
endif