There are a few links to some helpful decompiley things in this thread, and I was curious, so this happened.
Some Rasgos Document, or A Field Guide To Personality 1.0
This guide will be using the Monkey English translations for simplicity, even if the Save Editor ones are a bit more accurate. For clarity, this is a list of the traits where they differ so there's less confusion depending on where you want to go edit them.
Adaptabilty = Open to Change
Confidence = Self-confidence
Conformist = Normative Awareness
Shyness = Social Daring
Stability = Emotional Stability
Part 1: Scoring
Each trait is essentially two scores in one: for instance, Privacy is both a score for Open and Discreet. In general terms, each trait and be thought of as a Low score and a High score. So this guide won't refer to things like Open and Discreet by those names, instead they will be Low Privacy and High Privacy. This is because the game calculates them in such a way that only one or the other can be nonzero.
Fundamentally, both scores go up the farther away they are from the middle point, i.e. 0.5,
in their direction only. At 0.5 Privacy, Low Privacy and High Privacy are both 0. At 0 Privacy, Low Privacy is 1. At 1 Privacy, High Privacy is 1. At 0.25 Privacy, Low Privacy is 0.5 and High Privacy is 0. At 0.8 Privacy, Low Privacy is 0 and High Privacy is 0.6, and so on.
Part 2: Factors contributing to Personality scores
Each personality score is derived from a combination of traits and a bonus from the current active bars. First a rundown of what this guide will label the bars:
Arousal: small red bar.
Bored (or disappointed): the grey bar.
Consent: The highest level of either green bar.
DesHielo ("thawing"): a hidden bar that starts at 0 and goes up the longer the scene goes on until maxing out at 100/100. Human Trait 'FacilidadParaDesHielar' controls the speed of the rise.
Happy (Alegria): a hidden bar. Generally starts at 30/100. Goes up when the model's favorite spots are interacted with, down when the unfavorite spots are interacted with (or something like that).
Pain: the purple bar.
Rage: the red bar.
Using BetterExperience will let you monitor the hidden bar values.
When referring to the bars below with 'empty' in front, i.e. "Empty Rage", this means the unfilled part of the bar is used for scoring.
The game tends to classify the scores in two ways:
Very Low: 0 to 0.2
Low: 0.2 to 0.4
Medium: 0.4 to 0.6
High: 0.6 to 0.8
Very High: 0.8 and up
i.e. for qualifications for sending to other agencies
Other checks tend to use a simple yes/no boolean where the cutoff is 0 to 0.375 (i.e. 3/8) for no and 0.375 to 1 for yes, which is functionally "Medium or higher" with a little extra wiggle room.
Part 3: Deriving Personality scores
These calculations generally result in a value between 0 and 1 but can go over 1 with enough contribution from the bars. Because the bar % filled values are often cubed or to the 4th power, generally speaking only very full or very empty bars can influence the calculations. Every model temporarily activates the Perverted personality type if they didn't already have it during an orgasm because the bar's influence alone is enough to hit the cutoff (1.0 * 1.0 * 3/8) but otherwise no combination of bars can do that without some help from the traits.
Exhibitionist: 50% Low Conformist + 50% High Shyness + (Arousal^3 * 3/16)
Extrovert: 80% High Warmth + 13.33% High Sensitivity + 6.67% High Stability + (Happy^2 * 1/8)
Honest: 66.67% Low Vigilance + 33.33% High Confidence + (DesHielo^3 * 3/40) + (Empty Bored^3 * 3/40)
Optimist: 50% High Adaptibility + 50% High Confidence + (Happy^2 * 1/8)
Perverted: 70% Low Privacy + 30% High Shyness + (Arousal^2 * 3/8)
Respectful: 33.33% Low Vivacity + 33.33% High Perfectionist + 33.33% High Privacy + (DesHielo^4 * 3/32) + (Empty Bored^4 * 3/32) + (Empty Rage^4 * 3/32)
Rude: 40% Low Sensitivity + 25% Low Stability + 15% High Dominance + (Rage^2 * 9/32)
yes, this doesn't add up to 100% in the code. It seems like the genetic factor contribution to Rude is intentionally capped at High.
Shy: 75% Low Shyness + 25% Low Confidence + (Pain^4 * 3/40)
Submissive: 100% Low Dominance + (Pain^2 * 3/16)
There is also a hidden personality trait:
Dishonesty: 66.67% High Vigilance + 33.33% Low Confidence + (Bored^2 * 1/4)
The higher a model's dishonesty, the higher the chance a model will change a true response to a complaint about being touched too hard/fast.
Part 4: Personality speech types
Traits and bars also influence how the model speaks. There are four different types, and the one with the highest evaluated score will be the one considered 'active'. This influences not just the word choices but also the chances of potential responses (for instance, you're probably not going to see a model ask if it's hot in here and strip down if "Horny" isn't on top).
The four types are Horny, Gentle, Rude, and Shy. Each score is rated 0 to 1 overall, with traits contributing 80% and bars contributing 20% to the total.
Horny Traits: 70% High Shyness + 20% Low Privacy + 10% High Warmth
Horny Bars: 75% Pleasure + 25% Arousal
Gentle Traits: 80% High Sensitivity + 10% Low Warmth + 10% Low Dominance
Gentle Bars: 25% Pleasure + 25% Happy + 50% Empty Rage
Rude Traits: 50% High Dominance + 40% Low Stability + 10% High Shyness
Rude Bars: 100% Rage
Shy Traits: 60% Low Shyness + 20% Low Warmth + 20% Low Dominance
Shy Bars: 66.67% Consent + 33.33% Pain
Part 5: Addendum
If this seems quite complex, there is some good news. You can basically ignore these Rasgo genes, because they don't actually have any implemented effects yet:
Abstraction (this is the Rasgo pragmatic vs imaginative one, not the TraitHumano one which affects 'looking at' related strengths and cooldowns)
Concern (safe vs preoccupied)
Tension (relaxed vs impatient)
Reasoning (concrete vs abstract)
These are all instanced, saved, and loaded but near as I can tell never referenced in any of the part of the code.