feelotraveller
you were asking how the %'s are derived, here's a spreadsheet breakdown of stransform.
STransform is applied to Traits and Attributes as is.
Preferences use a form of Rank-ECDF on the non 0 values. (Basically a list is generated of non 0 values, and fed into a matrix that derives preferences). These non 0 values are mapped to 50% to 100% by taking minmax and dividing by /2 and adding .5 (transforms 0 to 100% to 50% to 100%). 0's are back end adjusted to ~<50%.
Skills uses a minmax transform in a similar fashion as Preferences uses RankECDF, aka the conversion to 50% to 100%, it also prunes 0's. 0's are back end adjusted to ~<50%.
I'll try to update that to show what I'm talking about, but it's hard to show it without an actual skill dataset.
So far it's just transforming a single dwarf's attributes to %'s, but in actuality, this transform is ran on the entire population of dwarf's at once as one single input matrix (per aspect... i.e. only one aspect is transformed at a time, such as attributes, preferences, skills, traits).
https://docs.google.com/spreadsheets/d/1wahKS61zx5wtO_dgCcp9nOKYnDqO2ZbF9dJab0IchWQ/edit?usp=sharingif you want edit access, pm me. I don't want people to be able to change stuff with just a link just in case the spreadsheet gets messed up.
One final note:
I forgot to mention. The aspects are combined using a weighted average setup (that's what all the weights inside DT amount to). Then the output is converted to a raw %. That raw % generally varies between 20 to 80% for the population, and to help a player see the #'s a little better, they are rescaled around their min, median, and max; representing 0%, 50%, and 100% (what you see inside DT for role %'s).