diff --git a/1.3/Defs/PreceptDefs/Precepts_SizeMatters.xml b/1.3/Defs/PreceptDefs/Precepts_SizeMatters.xml new file mode 100644 index 0000000..b9bc867 --- /dev/null +++ b/1.3/Defs/PreceptDefs/Precepts_SizeMatters.xml @@ -0,0 +1,172 @@ + + + + + + GenitalSize + + UI/Memes/SexualDissolutely + + + + + + GenitalSize_Big_Better + GenitalSize + The size matters. + + High + 20 + 200 + +
  • + GenitalSize_Approved +
  • +
  • + GenitalSize_Approved_Social +
  • +
    +
    + + + GenitalSize_NoRules + GenitalSize + The size is unimportant. + + High + 10 + 100 + + + + + + GenitalSize_Smaller_Better + GenitalSize + The greeks actually believed, that a big genital is an animalistic feature. Important members are known for their small genitals. + + High + 30 + 200 + +
  • + GenitalSize_Disapproved +
  • +
  • + GenitalSize_Disapproved_Social +
  • +
    +
    + + + + + GenitalSize_Approved + Thought_Situational + RJWSexperience.Ideology.ThoughtWorker_Precept_GenitalSize_Approved + +
  • + + I ... I am okay the way I am! + -10 +
  • +
  • + + I think I am below average. + -5 +
  • +
  • + + I guess I am the average. + 0 +
  • +
  • + + I think I am above average. + +5 +
  • +
  • + + Don't want to be the elephant in the room, but parts of me are. + +10 +
  • +
    +
    + + + GenitalSize_Disapproved + RJWSexperience.Ideology.ThoughtWorker_Precept_GenitalSize_Disapproved + Thought_Situational + +
  • + + I do not need great genitals, as I am a being of supreme intellect and grace. + +10 +
  • +
  • + + I think I am below average. + +5 +
  • +
  • + + I guess I am the average. + 0 +
  • +
  • + + I think I am above average. + -5 +
  • +
  • + + I am closer to an animal, than to a human. Why did I have to be born this way? + -10 +
  • +
    +
    + + + + + GenitalSize_Approved_Social + RJWSexperience.Ideology.ThoughtWorker_Precept_GenitalSize_Approved_Social + Thought_SituationalSocial + +
  • + + -5 +
  • +
  • + + 0 +
  • +
  • + + +5 +
  • +
    +
    + + + + GenitalSize_Disapproved_Social + RJWSexperience.Ideology.ThoughtWorker_Precept_GenitalSize_Disapproved_Social + Thought_SituationalSocial + +
  • + + -5 +
  • +
  • + + 0 +
  • +
  • + + +5 +
  • +
    +
    + +
    \ No newline at end of file diff --git a/Source/IdeologyAddon/Ideology/IdeoUtility.cs b/Source/IdeologyAddon/Ideology/IdeoUtility.cs index 2334aec..9414558 100644 --- a/Source/IdeologyAddon/Ideology/IdeoUtility.cs +++ b/Source/IdeologyAddon/Ideology/IdeoUtility.cs @@ -1,4 +1,5 @@ using RimWorld; +using rjw; using Verse; namespace RJWSexperience.Ideology @@ -33,5 +34,29 @@ namespace RJWSexperience.Ideology } return finalMultiplier; } + + public static float getGenitalSize(Pawn p) + { + if (p == null) + return 0f; + + // Iff the pawn has multiple genitalia, the "best" is picked (the biggest penis or tightest vagina) + float best_seen_size = 0f; + foreach (Hediff part in rjw.Genital_Helper.get_AllPartsHediffList(p)) + { + // Only check for Vaginas and Penises, not for Anus or for things not categorized as primary sexual parts + if (Genital_Helper.is_penis(part) || Genital_Helper.is_vagina(part)) + { + best_seen_size = part.Severity > best_seen_size ? part.Severity : best_seen_size; + } + } + + + // For Women, the scale is inverted. + if (p.gender == Gender.Female) + return 1 - best_seen_size; + + return best_seen_size; + } } } diff --git a/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Approved.cs b/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Approved.cs new file mode 100644 index 0000000..6c5f491 --- /dev/null +++ b/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Approved.cs @@ -0,0 +1,31 @@ +using RimWorld; +using rjw; +using Verse; + +namespace RJWSexperience.Ideology +{ + public class ThoughtWorker_Precept_GenitalSize_Approved : ThoughtWorker_Precept + { + protected override ThoughtState ShouldHaveThought(Pawn p) + { + // We have 5 stages, which map directly to genitalia severity: + // Micro(<0.2), Small(>0.2&&<0.4), Normal(>0.4&&<0.6), Big(>0.6&&<0.8), Huge(>0.8) + if (p != null && Genital_Helper.get_AllPartsHediffList(p).Count > 0) + { + float best_size = IdeoUtility.getGenitalSize(p); + if (best_size < 0.2f) + return ThoughtState.ActiveAtStage(0); + else if (best_size < 0.4f) + return ThoughtState.ActiveAtStage(1); + else if (best_size < 0.6f) + return ThoughtState.ActiveAtStage(2); + else if (best_size < 0.8f) + return ThoughtState.ActiveAtStage(3); + else if (best_size > 0.8f) + return ThoughtState.ActiveAtStage(4); + } + // This might can happen if the pawn has no genitalia ... maybe? + return ThoughtState.Inactive; + } + } +} diff --git a/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Approved_Social.cs b/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Approved_Social.cs new file mode 100644 index 0000000..22dadbe --- /dev/null +++ b/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Approved_Social.cs @@ -0,0 +1,29 @@ +using RimWorld; +using rjw; +using Verse; + +namespace RJWSexperience.Ideology +{ + public class ThoughtWorker_Precept_GenitalSize_Approved_Social : ThoughtWorker_Precept_Social + { + + // Important Note: For the Social Worker, we measure otherPawns genitalia + protected override ThoughtState ShouldHaveThought(Pawn p, Pawn otherPawn) + { + // We have 3 stages, which map directly to genitalia severity: + // Unfavorable(<0.4), Normal(>0.4&&<0.6), Favorable(>0.6) + if (otherPawn != null && Genital_Helper.get_AllPartsHediffList(otherPawn).Count > 0) + { + float best_size = IdeoUtility.getGenitalSize(otherPawn); + if (best_size < 0.4f) + return ThoughtState.ActiveAtStage(0); + else if (best_size < 0.6f) + return ThoughtState.ActiveAtStage(1); + else if (best_size > 0.6f) + return ThoughtState.ActiveAtStage(2); + } + // This might can happen if the pawn has no genitalia ... maybe? + return ThoughtState.Inactive; + } + } +} diff --git a/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Disapproved.cs b/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Disapproved.cs new file mode 100644 index 0000000..7f7eae2 --- /dev/null +++ b/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Disapproved.cs @@ -0,0 +1,32 @@ +using RimWorld; +using rjw; +using Verse; + +namespace RJWSexperience.Ideology +{ + public class ThoughtWorker_Precept_GenitalSize_Disapproved : ThoughtWorker_Precept + { + protected override ThoughtState ShouldHaveThought(Pawn p) + { + // We have 5 stages, which map directly to genitalia severity: + // Micro(<0.2), Small(>0.2&&<0.4), Normal(>0.4&&<0.6), Big(>0.6&&<0.8), Huge(>0.8) + if (p != null && Genital_Helper.get_AllPartsHediffList(p).Count > 0) + { + float best_size = IdeoUtility.getGenitalSize(p); + if (best_size < 0.2f) + return ThoughtState.ActiveAtStage(0); + else if (best_size < 0.4f) + return ThoughtState.ActiveAtStage(1); + else if (best_size < 0.6f) + return ThoughtState.ActiveAtStage(2); + else if (best_size < 0.8f) + return ThoughtState.ActiveAtStage(3); + else if (best_size > 0.8f) + return ThoughtState.ActiveAtStage(4); + } + // This might can happen if the pawn has no genitalia ... maybe? + return ThoughtState.Inactive; + } + + } +} diff --git a/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Disapproved_Social.cs b/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Disapproved_Social.cs new file mode 100644 index 0000000..7df72e4 --- /dev/null +++ b/Source/IdeologyAddon/Ideology/PreceptWorkers/ThoughtWorker_Precept_GenitalSize_Disapproved_Social.cs @@ -0,0 +1,28 @@ +using RimWorld; +using rjw; +using Verse; + +namespace RJWSexperience.Ideology +{ + public class ThoughtWorker_Precept_GenitalSize_Disapproved_Social : ThoughtWorker_Precept_Social + { + // Important Note: For the Social Worker, we measure otherPawns genitalia + protected override ThoughtState ShouldHaveThought(Pawn p, Pawn otherPawn) + { + // We have 3 stages, which map directly to genitalia severity: + // Unfavorable(<0.4), Normal(>0.4&&<0.6), Favorable(>0.6) + if (otherPawn != null && Genital_Helper.get_AllPartsHediffList(otherPawn).Count > 0) + { + float best_size = IdeoUtility.getGenitalSize(otherPawn); + if (best_size < 0.4f) + return ThoughtState.ActiveAtStage(0); + else if (best_size < 0.6f) + return ThoughtState.ActiveAtStage(1); + else if (best_size > 0.6f) + return ThoughtState.ActiveAtStage(2); + } + // This might can happen if the pawn has no genitalia ... maybe? + return ThoughtState.Inactive; + } + } + } diff --git a/Source/IdeologyAddon/IdeologyAddon.csproj b/Source/IdeologyAddon/IdeologyAddon.csproj index 90a125c..819c938 100644 --- a/Source/IdeologyAddon/IdeologyAddon.csproj +++ b/Source/IdeologyAddon/IdeologyAddon.csproj @@ -51,6 +51,14 @@ + + + + + + + +