So my formula's are starting to make sense to splinterz. I knew I wasn't mad...
It's taken a lot of trial and error, but in theory, what it does is give more weight to deviations from the mean, as well as give a wider spread of %.
Here's a taste of what I've been working on:
37/name="Wood cutter"
37/attributes="1::strength:1.1,agility:1.1,endurance:1.1,willpower:0.9,spatial sense:1.2, kinesthetic sense:0.9"
37/traits=""
38/name="Trapper"
38/attributes="1::agility:1,analytical ability:1,creativity:1,spatial sense:1.1"
38/traits=""
38/skills=""
39/name="Trapper, Alt"
39/script="
function findZ(x, mean, stdev){ var result = ((x-mean)/stdev); return result}
function normalcdf(X){ var T=1/(1+.2316419*Math.abs(X)); var D=.3989423*Math.exp(-X*X/2); var Prob=D*T*(.3193815+T*(-.3565638+T*(1.781478+T*(-1.821256+T*1.330274)))); if (X>0) { Prob=1-Prob } return Prob }
function strDev() {return d.attribute_stdev(0)}
function agiDev() {return d.attribute_stdev(1)}
function tuffDev() {return d.attribute_stdev(2)}
function endDev() {return d.attribute_stdev(3)}
function recDev() {return d.attribute_stdev(4)}
function disRDev() {return d.attribute_stdev(5)}
function anaADev() {return d.attribute_stdev(6)}
function focDev() {return d.attribute_stdev(7)}
function willDev() {return d.attribute_stdev(8)}
function creDev() {return d.attribute_stdev(9)}
function intuDev() {return d.attribute_stdev(10)}
function patDev() {return d.attribute_stdev(11)}
function memDev() {return d.attribute_stdev(12)}
function linADev() {return d.attribute_stdev(13)}
function spaSDev() {return d.attribute_stdev(14)}
function musDev() {return d.attribute_stdev(15)}
function kinSDev() {return d.attribute_stdev(16)}
function empDev() {return d.attribute_stdev(17)}
function socADev(){return d.attribute_stdev(18)}
function str() {return normalcdf(findZ(d.strength(), d.attribute_mean(0), d.attribute_stdev(0)))}
function agi() {return normalcdf(findZ(d.agility(), d.attribute_mean(1), d.attribute_stdev(1)))}
function tuff() {return normalcdf(findZ(d.toughness(), d.attribute_mean(2), d.attribute_stdev(2)))}
function end() {return normalcdf(findZ(d.endurance(), d.attribute_mean(3), d.attribute_stdev(3)))}
function rec() {return normalcdf(findZ(d.recuperation(), d.attribute_mean(4), d.attribute_stdev(4)))}
function disR() {return normalcdf(findZ(d.disease_resistance(), d.attribute_mean(5), d.attribute_stdev(5)))}
function anaA() {return normalcdf(findZ(d.analytical_ability(), d.attribute_mean(6), d.attribute_stdev(6)))}
function foc() {return normalcdf(findZ(d.focus(), d.attribute_mean(7), d.attribute_stdev(7)))}
function will() {return normalcdf(findZ(d.willpower(), d.attribute_mean(8), d.attribute_stdev(8)))}
function cre() {return normalcdf(findZ(d.creativity(), d.attribute_mean(9), d.attribute_stdev(9)))}
function intu() {return normalcdf(findZ(d.intuition(), d.attribute_mean(10), d.attribute_stdev(10)))}
function pat() {return normalcdf(findZ(d.patience(), d.attribute_mean(11), d.attribute_stdev(11)))}
function mem() {return normalcdf(findZ(d.memory(), d.attribute_mean(12), d.attribute_stdev(12)))}
function linA() {return normalcdf(findZ(d.linguistic_ability(), d.attribute_mean(13), d.attribute_stdev(13)))}
function spaS() {return normalcdf(findZ(d.spatial_sense(), d.attribute_mean(14), d.attribute_stdev(14)))}
function mus() {return normalcdf(findZ(d.musicality(), d.attribute_mean(15), d.attribute_stdev(15)))}
function kinS() {return normalcdf(findZ(d.kinesthetic_sense(), d.attribute_mean(16), d.attribute_stdev(16)))}
function emp() {return normalcdf(findZ(d.empathy(), d.attribute_mean(17), d.attribute_stdev(17)))}
function socA() {return normalcdf(findZ(d.social_awareness(), d.attribute_mean(18), d.attribute_stdev(18)))}
function d_str() {return d.strength()-d.attribute_mean(0)}
function d_agi() {return d.agility()-d.attribute_mean(1)}
function d_tuff() {return d.toughness()-d.attribute_mean(2)}
function d_end() {return d.endurance()-d.attribute_mean(3)}
function d_rec() {return d.recuperation()-d.attribute_mean(4)}
function d_disR() {return d.disease_resistance()-d.attribute_mean(5)}
function d_anaA() {return d.analytical_ability()-d.attribute_mean(6)}
function d_foc() {return d.focus()-d.attribute_mean(7)}
function d_will() {return d.willpower()-d.attribute_mean(8)}
function d_cre() {return d.creativity()-d.attribute_mean(9)}
function d_intu() {return d.intuition()-d.attribute_mean(10)}
function d_pat() {return d.patience()-d.attribute_mean(11)}
function d_mem() {return d.memory()-d.attribute_mean(12)}
function d_linA() {return d.linguistic_ability()-d.attribute_mean(13)}
function d_spaS() {return d.spatial_sense()-d.attribute_mean(14)}
function d_mus() {return d.musicality()-d.attribute_mean(15)}
function d_kinS() {return d.kinesthetic_sense()-d.attribute_mean(16)}
function d_emp() {return d.empathy()-d.attribute_mean(17)}
function d_socA() {return d.social_awareness()-d.attribute_mean(18)}
function findAlternative(x, y){return normalcdf(findZ(x, 0, y))}
totalAttributes=4;
avgMDeviation=
(
(d_agi()*1)+
(d_anaA()*1)+
(d_cre()*1)+
(d_spaS()*1.1)
)/totalAttributes;
avgDev=
Math.sqrt
(
(
Math.pow((agiDev()*1),2)+
Math.pow((anaADev()*1),2)+
Math.pow((creDev()*1),2)+
Math.pow((spaSDev()*1.1),2)
)
/
totalAttributes
);
findAlternative(avgMDeviation, avgDev)*100;
"
40/name="Close Combat"
40/attributes="1::strength:1.2,agility:1,toughness:1.3,endurance:1,recuperation:0.8,disease resistance:0.8,willpower:0.7,spatial sense:1.1,kinesthetic sense:0.9,focus:0.8"
40/traits=""
40/skills=""
41/name="Close Combat, alt"
41/script="
function findZ(x, mean, stdev){ var result = ((x-mean)/stdev); return result}
function normalcdf(X){ var T=1/(1+.2316419*Math.abs(X)); var D=.3989423*Math.exp(-X*X/2); var Prob=D*T*(.3193815+T*(-.3565638+T*(1.781478+T*(-1.821256+T*1.330274)))); if (X>0) { Prob=1-Prob } return Prob }
function strDev() {return d.attribute_stdev(0)}
function agiDev() {return d.attribute_stdev(1)}
function tuffDev() {return d.attribute_stdev(2)}
function endDev() {return d.attribute_stdev(3)}
function recDev() {return d.attribute_stdev(4)}
function disRDev() {return d.attribute_stdev(5)}
function anaADev() {return d.attribute_stdev(6)}
function focDev() {return d.attribute_stdev(7)}
function willDev() {return d.attribute_stdev(8)}
function creDev() {return d.attribute_stdev(9)}
function intuDev() {return d.attribute_stdev(10)}
function patDev() {return d.attribute_stdev(11)}
function memDev() {return d.attribute_stdev(12)}
function linADev() {return d.attribute_stdev(13)}
function spaSDev() {return d.attribute_stdev(14)}
function musDev() {return d.attribute_stdev(15)}
function kinSDev() {return d.attribute_stdev(16)}
function empDev() {return d.attribute_stdev(17)}
function socADev(){return d.attribute_stdev(18)}
function str() {return normalcdf(findZ(d.strength(), d.attribute_mean(0), d.attribute_stdev(0)))}
function agi() {return normalcdf(findZ(d.agility(), d.attribute_mean(1), d.attribute_stdev(1)))}
function tuff() {return normalcdf(findZ(d.toughness(), d.attribute_mean(2), d.attribute_stdev(2)))}
function end() {return normalcdf(findZ(d.endurance(), d.attribute_mean(3), d.attribute_stdev(3)))}
function rec() {return normalcdf(findZ(d.recuperation(), d.attribute_mean(4), d.attribute_stdev(4)))}
function disR() {return normalcdf(findZ(d.disease_resistance(), d.attribute_mean(5), d.attribute_stdev(5)))}
function anaA() {return normalcdf(findZ(d.analytical_ability(), d.attribute_mean(6), d.attribute_stdev(6)))}
function foc() {return normalcdf(findZ(d.focus(), d.attribute_mean(7), d.attribute_stdev(7)))}
function will() {return normalcdf(findZ(d.willpower(), d.attribute_mean(8), d.attribute_stdev(8)))}
function cre() {return normalcdf(findZ(d.creativity(), d.attribute_mean(9), d.attribute_stdev(9)))}
function intu() {return normalcdf(findZ(d.intuition(), d.attribute_mean(10), d.attribute_stdev(10)))}
function pat() {return normalcdf(findZ(d.patience(), d.attribute_mean(11), d.attribute_stdev(11)))}
function mem() {return normalcdf(findZ(d.memory(), d.attribute_mean(12), d.attribute_stdev(12)))}
function linA() {return normalcdf(findZ(d.linguistic_ability(), d.attribute_mean(13), d.attribute_stdev(13)))}
function spaS() {return normalcdf(findZ(d.spatial_sense(), d.attribute_mean(14), d.attribute_stdev(14)))}
function mus() {return normalcdf(findZ(d.musicality(), d.attribute_mean(15), d.attribute_stdev(15)))}
function kinS() {return normalcdf(findZ(d.kinesthetic_sense(), d.attribute_mean(16), d.attribute_stdev(16)))}
function emp() {return normalcdf(findZ(d.empathy(), d.attribute_mean(17), d.attribute_stdev(17)))}
function socA() {return normalcdf(findZ(d.social_awareness(), d.attribute_mean(18), d.attribute_stdev(18)))}
function d_str() {return d.strength()-d.attribute_mean(0)}
function d_agi() {return d.agility()-d.attribute_mean(1)}
function d_tuff() {return d.toughness()-d.attribute_mean(2)}
function d_end() {return d.endurance()-d.attribute_mean(3)}
function d_rec() {return d.recuperation()-d.attribute_mean(4)}
function d_disR() {return d.disease_resistance()-d.attribute_mean(5)}
function d_anaA() {return d.analytical_ability()-d.attribute_mean(6)}
function d_foc() {return d.focus()-d.attribute_mean(7)}
function d_will() {return d.willpower()-d.attribute_mean(8)}
function d_cre() {return d.creativity()-d.attribute_mean(9)}
function d_intu() {return d.intuition()-d.attribute_mean(10)}
function d_pat() {return d.patience()-d.attribute_mean(11)}
function d_mem() {return d.memory()-d.attribute_mean(12)}
function d_linA() {return d.linguistic_ability()-d.attribute_mean(13)}
function d_spaS() {return d.spatial_sense()-d.attribute_mean(14)}
function d_mus() {return d.musicality()-d.attribute_mean(15)}
function d_kinS() {return d.kinesthetic_sense()-d.attribute_mean(16)}
function d_emp() {return d.empathy()-d.attribute_mean(17)}
function d_socA() {return d.social_awareness()-d.attribute_mean(18)}
function findAlternative(x, y){return normalcdf(findZ(x, 0, y))}
totalAttributes=10;
avgMDeviation=
(
(d_str()*1.2)+
(d_agi()*1)+
(d_tuff()*1.3)+
(d_end()*1)+
(d_rec()*.8)+
(d_disR()*.8)+
(d_will()*.7)+
(d_spaS()*1.1)+
(d_kinS()*.9)+
(d_foc()*.8)
)/totalAttributes;
avgDev=
Math.sqrt
(
(
Math.pow((strDev() *1.2) ,2) +
Math.pow((agiDev() *1) ,2) +
Math.pow((tuffDev() *1.3) ,2) +
Math.pow((endDev() *1) ,2) +
Math.pow((recDev() *.8) ,2) +
Math.pow((disRDev() *.8) ,2) +
Math.pow((willDev() *.7) ,2) +
Math.pow((spaSDev() *1.1) ,2) +
Math.pow((kinSDev() *.9) ,2) +
Math.pow((focDev() *.8) ,2)
)
/
totalAttributes
);
Math.round(findAlternative(avgMDeviation, avgDev)*100);
"