private static void FixStats( ref int str, ref int dex, ref int intel, int max )
{
int vMax = max - 30;
int vStr = str - 10;
int vDex = dex - 10;
int vInt = intel - 10;
if ( vStr < 0 )
vStr = 0;
if ( vDex < 0 )
vDex = 0;
if ( vInt < 0 )
vInt = 0;
int total = vStr + vDex + vInt;
if ( total == 0 || total == vMax )
return;
double scalar = vMax / (double)total;
vStr = (int)(vStr * scalar);
vDex = (int)(vDex * scalar);
vInt = (int)(vInt * scalar);
FixStat( ref vStr, (vStr + vDex + vInt) - vMax, vMax );
FixStat( ref vDex, (vStr + vDex + vInt) - vMax, vMax );
FixStat( ref vInt, (vStr + vDex + vInt) - vMax, vMax );
str = vStr + 10;
dex = vDex + 10;
intel = vInt + 10;
}