Could you explain how "Sexual Treason" works? All I found was a post in this saying it happens if high-statted people or high-class people have sex with "unapproved" people, but it seems to be applied with no logic.
In order to be eligible to commit sexual treason, the sum of your raw health and intelligence must be 18 or higher. Then, your mate must be inappropriate. Your mate can be inappropriate in one of two ways:
1. Your mate is low-quality. High-quality mates must be one (either) of the following:
a. have high enough attributes to be eligible to commit sexual treason themselves;
b. be important conservatives (corporate managers, hanging judges, eminent scientists, etc.)
2. Your mate is not conservative.
If you commit sexual treason (either #1 or #2, above, is the case), then you must pass either a street sense or a stealth check, or your mate must (remain) a sleeper. If you pass either skill check, then you are guilty of the crime, but the law does not suspect you for it because you managed to hide your liaisons. If your mate remains a sleeper, then again, you are guilty, but nobody knows about it (you will still need to pass the check if your sleeper is outed, though!).
In your case, the following happened:
-In the first case, the low-statted Fireman was judged to be a low-quality mate, which means your mutant had committed the crime before joining the LCS.
-In the second case, the mutant and dancer are both liberal, and are so guilty for that reason.
-In the third case, they're guilty all right, but managed to pass their skill checks.
/* criminalizes (or not) depending on sexual freedom laws and skills */
void check_for_sexual_crimes(Creature &master, Creature &slave, char circumstance)
{
/*
Circumstances key: lower-case letters indicate that no permanent relationship (i.e. no love-enslavement) has taken place. They are harder for law-enforcement to find.
Upper case letters indicate that a permanent relationship has been established.
Key codes are:
v = you have returned from a vacation, and will meet tomorrow
L = you have decided to start a permanent relationship, with no extra strings attached
M = the 'master' is already married to the 'slave', and may be guilty ahead of time
Q = the slave was a sleeper and is now quitting xer job
A = the slave was a sleeper, but has been arrested for thievery on the LCS' behalf
F = the slave was a sleeper, but has been fired for snooping
*/
int checktreason = 1, checkaddultery = 1, checkhomo = 1;
int difficulty;
int chargetreason = 0, chargeadultery = 0, chargehomo = 0;
int idcircumstance = 0;
//Step 1: if the slave is a sleeper, then the law is unaware of the existence of the relationship, and will ignore it. The exception is if they are both sleepers, in which case the law is well aware of it!
if (slave.flag & CREATUREFLAG_SLEEPER)
{
if (!(master.flag & CREATUREFLAG_SLEEPER))
{
//Both sleepers, so any secret marital relationships not explored. However, can still be guilty of sexual treason or homosexuality.
checkaddultery = 0;
}
else
return; //Nothing to see here, ociffer!
}
//Step 2: determine the difficulty of the resulting skill checks to avoid being caught (assuming that you are doing anything criminal, that is).
if (circumstance == 'v')
idcircumstance = 0;
else if (circumstance == 'L')
idcircumstance = 1;
else if (circumstance == 'Q')
idcircumstance = 2;
else if (circumstance == 'M')
idcircumstance = 3;
else if (circumstance == 'A')
idcircumstance = 4;
else if (circumstance == 'F')
idcircumstance = 5;
else
idcircumstance = -1;
switch (circumstance)
{
case 'v': difficulty = DIFFICULTY_VERYEASY; break;
case 'L': difficulty = DIFFICULTY_EASY - law[LAW_PRIVACY]; break;
case 'Q': difficulty = DIFFICULTY_EASY - law[LAW_PRIVACY]; break;
case 'M': difficulty = DIFFICULTY_EASY - law[LAW_PRIVACY]; break;
case 'A': difficulty = DIFFICULTY_AVERAGE; break;
case 'F': difficulty = DIFFICULTY_AVERAGE; break;
default:
erase();
move(14,1);
addstr("Your sexual adventures have discovered that you have bed bugs!");
move(15,1);
addstr("check_for_sexual_crimes is being called with circumstance type ");
addstr(circumstance);
addstr(".");
getch();
break;
}
//Step 3: check for the impact of laws.
if (law[LAW_GAY] >= 0)
checkhomo = 0; //Homosexuality is not illegal.
if (law[LAW_SEXUALFREEDOM] >= 0)
checkaddultery = 0; //Adultery may or may not still be illegal, but isn't being looked for.
if (law[LAW_SEXUALFREEDOM] > -2)
checktreason = 0; //Sexual treason is not a crime.
//Step 4: start running through the possible crimes...
//Homosexuality is defined as having a sexual relationship with a person of your gender. This is the gender that the conservatives see in you, not what you choose yourself!
if (checkhomo)
{
if (slave.gender_conservative == master.gender_conservative)
{
if (!slave.skill_check(SKILL_STREETSENSE, difficulty) || !master.skill_check(SKILL_STREETSENSE, difficulty))
{
//Failed to keep the cops from simply noticing
if (!slave.skill_check(SKILL_DISGUISE, difficulty) || !master.skill_check(SKILL_DISGUISE, difficulty))
chargehomo = 1; //Failed to disguise it as Platonic
}
}
}
//Adultery is defined as having a sexual relationship with more than one person. For now, only the master is capable of doing this, since the slave is freshly-recruited into the LCS.
if (checkaddultery)
{
if ((master.flag & CREATUREFLAG_LOVESLAVE) || (loveslaves(master) > 1))
{
if (!master.skill_check(SKILL_STREETSENSE, difficulty))
{
//Failed to keep the cops from noticing
if (!master.skill_check(SKILL_STEALTH, difficulty))
chargeadultery = 1; //Failed to hide your liasons
}
}
}
//Sexual treason is having sex against the interests of the state. To be guilty of it, you must have native (not-juice-modified) Health and Intelligence adding up to 18 or more, and your mate must be Conservatively inappropriate. Appropriate mates include any Important Conservative, as well as any other conservative whose Health and Intelligence add up to 18 or more.
if (checktreason)
{
if (((master.get_attribute(ATTRIBUTE_HEALTH, false) + master.get_attribute(ATTRIBUTE_INTELLIGENCE, false)) >= 18) || ((slave.get_attribute(ATTRIBUTE_HEALTH, false) + slave.get_attribute(ATTRIBUTE_INTELLIGENCE, false)) >= 18))
{
//You are of sufficient quality to be capable of sexual treason. Now let's see about your mate.
if (slave.align == ALIGN_CONSERVATIVE)
{
//Either your mate is still conservative and you're still dating (legal), or your mate is a sleeper (illegal, but nobody's going to notice because they think xe's still conservative).
if ((slave.get_attribute(ATTRIBUTE_HEALTH, false) + slave.get_attribute(ATTRIBUTE_INTELLIGENCE, false)) >= 10)
checktreason = 0; //Your mate is appropriate! Good conservative law-abiding citizen!
else
{
switch (slave.type)
{
case CREATURE_CORPORATE_CEO:
case CREATURE_CORPORATE_MANAGER:
case CREATURE_JUDGE_CONSERVATIVE:
case CREATURE_SCIENTIST_EMINENT:
case CREATURE_NEWSANCHOR:
case CREATURE_RADIOPERSONALITY:
case CREATURE_POLITICIAN:
case CREATURE_MILITARYOFFICER:
case CREATURE_CCS_ARCHCONSERVATIVE:
checktreason = 0; //Again, appropriate!
break;
default:
break;
}
}
if (checktreason == 0)
chargeadultery = 0; //If it's not sexual treason because your mate is appropriate, then would-be adultery charges are waived
}
if (checktreason)
{
//Your mate wasn't appropriate; you're guilty. Are you found out?
if (!master.skill_check(SKILL_STREETSENSE, difficulty) || !slave.skill_check(SKILL_STREETSENSE, difficulty))
{
//You weren't able to do it when nobody was looking
if (!master.skill_check(SKILL_STEALTH, difficulty))
chargetreason = 1; //Failed to hide your liasons
}
}
}
}
if (chargehomo || chargeadultery || chargetreason)
{
erase();
if (chargehomo)
{
move(4, 1);
addstr(master.name, gamelog);
addstr(" and ", gamelog);
addstr(slave.name, gamelog);
addstr(" are now wanted for ", gamelog);
move(5, 1);
addstr("homosexuality!", gamelog);
criminalize(master, LAWFLAG_HOMOSEXUALITY);
criminalize(slave, LAWFLAG_HOMOSEXUALITY);
gamelog.newline();
}
if (chargeadultery)
{
move(7, 1);
addstr(master.name, gamelog);
addstr(" is now wanted for adultery!", gamelog);
criminalize(master, LAWFLAG_ADULTERY);
gamelog.newline();
}
if (chargetreason)
{
move(9, 1);
if (((master.get_attribute(ATTRIBUTE_HEALTH, false) + master.get_attribute(ATTRIBUTE_INTELLIGENCE, false)) >= 18) && !master.crimes_suspected[LAWFLAG_SEXUALTREASON]) //Can only have one count of sexual treason
{
addstr(master.name, gamelog);
addstr(" is now wanted for sexual treason!", gamelog);
criminalize(master, LAWFLAG_SEXUALTREASON);
gamelog.newline();
}
move(10, 1);
if (((slave.get_attribute(ATTRIBUTE_HEALTH, false) + slave.get_attribute(ATTRIBUTE_INTELLIGENCE, false)) >= 18) && !slave.crimes_suspected[LAWFLAG_SEXUALTREASON]) //Can only have one count of sexual treason
{
addstr(slave.name, gamelog);
addstr(" is now wanted for sexual treason!", gamelog);
criminalize(slave, LAWFLAG_SEXUALTREASON);
gamelog.newline();
}
}
getch();
}
}