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
+ Size Matters
+ UI/Memes/SexualDissolutely
+
+
+
+
+
+ GenitalSize_Big_Better
+ GenitalSize
+ The size matters.
+ Bigger = Better
+ High
+ 20
+ 200
+
+
+ GenitalSize_Approved
+
+
+ GenitalSize_Approved_Social
+
+
+
+
+
+ GenitalSize_NoRules
+ GenitalSize
+ The size is unimportant.
+ No Rules
+ 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.
+ Smaller = Better
+ High
+ 30
+ 200
+
+
+ GenitalSize_Disapproved
+
+
+ GenitalSize_Disapproved_Social
+
+
+
+
+
+
+
+ GenitalSize_Approved
+ Thought_Situational
+ RJWSexperience.Ideology.ThoughtWorker_Precept_GenitalSize_Approved
+
+
+ Despised Genitalsize
+ I ... I am okay the way I am!
+ -10
+
+
+ Unwanted Genitalsize
+ I think I am below average.
+ -5
+
+
+ Normal Genitals
+ I guess I am the average.
+ 0
+
+
+ Appreciated Genitals
+ I think I am above average.
+ +5
+
+
+ Venerated Genitals
+ 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
+
+
+ Venerated Genitals
+ I do not need great genitals, as I am a being of supreme intellect and grace.
+ +10
+
+
+ Appreciated Genitals
+ I think I am below average.
+ +5
+
+
+ Normal Genitals
+ I guess I am the average.
+ 0
+
+
+ Unwanted Genitals
+ I think I am above average.
+ -5
+
+
+ Despised Genitals
+ 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
+
+
+ Unwanted Genitals
+ -5
+
+
+ Normal Genitals
+ 0
+
+
+ Favorable Genitals
+ +5
+
+
+
+
+
+
+ GenitalSize_Disapproved_Social
+ RJWSexperience.Ideology.ThoughtWorker_Precept_GenitalSize_Disapproved_Social
+ Thought_SituationalSocial
+
+
+ Unwanted Genitals
+ -5
+
+
+ Normal Genitals
+ 0
+
+
+ Favorable Genitals
+ +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 @@
+
+
+
+
+
+
+
+